함수
: 특정한 기능을 수행하는 프로그램의 독립적인 단위(모듈)
→ 특정한 작업을 별도의 블록으로 따로 구성해 호출
프로그램 A
….
함수 B() ——————————>
…. <——————————-
end
함수 B()
….
return
end
콜링 함수는 콜드 함수가 return값을 줄 때까지 block 된다.
콜드 함수) 호출할 때 매개변수(타입, 식별자 포함)를 가지고 있고 반환할 때 값을 가짐
콜링 함수) 호출할 때 값을 가지고 있고 반환할 때 변수(반환값이 저장되는 곳)를 가짐
반환값은 무조건 하나의 결과값을 준다. (리스트도 하나의 결과 값)
→ 함수의 자료형도 하나, void는 값에 의미가 없어 콜드 함수에서 값을 받지 않음.
매개 변수는 여러 개를 사용할 수 있다.
[함수의 구성]
함수의 자료형 함수 이름(매개변수 리스트)
→ 매개 변수 리스트에서 변수의 타입이 중요
[함수를 사용하는 이유]
코드의 중복을 제거하여 간결
코드의 재사용성 증가
프로그램이 모듈화되어 유지, 보수가 쉽다.
(프로젝트는 무조건 유지, 보수가 쉬운 쪽으로 간다)
클래스
[클래스의 발생 배경]
지역 변수 { 선언 }
함수 변수 { 함수 내부 선언 }, 지역 변수의 하나
매개 변수 : 함수가 호출될 때 생성되고 리턴 시 사라진다. ←함수 변수보다 더 빨리 생성
전역 변수 : 프로그램 시작 시 생성, 종료 시 삭제되어 프로그램 전체에 영향
멤버 변수 : 변수들과 함수들을 묶어 놓은 것, 지정한 함수들만 해당 변수 사용
TIP) 지역 변수와 매개 변수를 사용하여 프로그램 작성하는 것이 좋다
→ 전역 변수를 사용하면 유지, 보수가 어려우므로 최대한 자제
→ 해결) 캡슐화 : 객체를 캡슐로 싸서 내부를 볼 수 없게 하는 것
[클래스]
: 객체 모양을 선언한 툴 (캡슐화)
→ 메소드(멤버 함수)와 필드(멤버 변수)는 모두 클래스 내에 정의
클래스는 실체 X (실체화 시킨 것을 메모리에 할당 → 객체(instance) )
[클래스 구성]
자바는 main 함수 내에 클래스 넣어야 한다.
접근 권한 클래스 선언 클래스 이름
클래스 이름 : 파일 이름이며 생성자 이름과 동일, 반드시 대문자로 작성
필드_ 멤버 변수 (클래스 내부에서 사용하는 변수 선언)
함수들은 멤버 변수를 같이 공통으로 공유해서 사용 → 함수 선언에서 변수를 선언 안해도 O
시험 문제) 클래스를 만들어라 (함수 선언에 변수 선언 할 필요 없다)
생성자는 리턴 타입 기재 X, 기재하면 에러 발생
→ 값을 돌려주려는 기능이 아니라 겍체를 초기화하는데 필요한 코드이기에
(클래스 이름과 동일한 특별한 메소드, 객체 생성 시 한번 실행)
[객체]
: 클래스의 모양대로 생성된 실체(instance)
주의) 클래스에서 가능하다고 객체에서 가능한 것이 아니다. 엄연히 다르다.
[상속]
: 부모의 것을 그대로 물려 받는 것 → 기능을 계속해 추가 가능
( 클래스 간에서 발생하는 게 상속, 객체 간에서 발생 X )
자바는 클래스 다중 상속 없음
(부모 클래스가 여러 개 X, 예외_인터페이스는 다중 상속 허용)
객체 지향 프로그래밍의 특징
캡슐화 : 관련 있는 함수끼리 묶음 → 오류 수정 편리
다형성 : 이름은 같은데 다른 기능을 수행
→ 같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현
c언어에서는 add(3+4), add(3.0+4.0) 둘다 사용 불가능
사례 1. 메소드 오버로딩 : 같은 이름이지만 다르게 작동하는 여러 메소드
함수 이름은 같은데 매개변수의 개수나 타입이 달라야 다른 함수
→ 타입이 다르면 2개의 생성자 있어도 된다.
(리턴 타입은 달라도 됨, 리턴 타입이 다르면 오버로딩 아니다)
사례 2. 메소드 오버라이딩 : 슈퍼 클래스의 메소드를 서브 클래스마다 다르게 구현
객체의 생성/접근
생성자
객체의 치환
객체 배열
메소드