우주코딩
의존 객체, 클래스 간의 관계, 생성자 선언, 패키지의 분류 본문
의존객체 : 인스턴스 필드에 주입
App(client) ==> BoardHandler (dependency)
사용(인스턴스를 가지고 BoardHandler의 메서드를 호출)
ex> boardHandler.add();
BoardHandler ==> Prompt
사용(프롬프트 인스턴스가 아닌 클래스를 가지고 메서드를 호출)
ex> Prompt.inputString("제목? ");
객채 != 인스턴스
객체는 상황에 따라 해석해야한다. 클래스나 인스턴스나 메서드를 호출해야한다.
'의존객체'는 클래스냐 인스턴스냐랑 상관없다. [다른 메서드를 호출하는 것]을 의존객체라고한다.
클래스를 가지고 메서드를 호출한다고 의존클래스냐? 아니다.
특정 메서드에서만 사용되는 경우, 일시적인 의존관계라 한다.
여러 메서드에서 사용되는 경우 지속적인 의존관계 이다.
사용되는 경우에 따라 일시적인 의존관계와 지속적인 의존 관계로 설정할 수 있다.
클래스 간의 관계
일시적인 관계 ( 특정 메서드에서 일시적으로 사용 ) -> dependency 의존.
-> 파라미터, 로컬 변수를 통해
지속적인 관계 ( 여러 메서드에서 지속적으로 사용 ) -> association 연관.
-> 인스턴스 필드를 통해
어찌됐던 둘다 의존객체임
생성자(constructor) 선언
- 인스턴스를 생성할 때 반드시 호출되어야 하는 메서드이다.
- 생성자는 리턴타입이 없다.
- 메서드 이름이 클래스 이름과 같아야한다.
- 인스턴스를 사용하기 전에 반드시 값을 설정해야하는 인스턴스변수가 있다면,
생성자의 파라미터로 선언하라. - 인스턴스 변수를 유효한 값으로 초기화시킨다.
- 필요하다면 인스턴스 변수를 초기화할 때 사용할 값을 파라미터로 받을 수 있다.
- 생성자에 파라미터가 있으면 인스턴스를 생성할 때 반드시 그 값을 넘겨야한다.
- 일종의 인스턴스 변수의 값을 설정하는 것을 강제하는 효과가 있다.
public ProjectHandler(MemberHandler memberHandler) {
this.memberHandler = memberHandler;
}
이제 의존 객체는 생성자를 통해 주입받기 때문에
외부에서 인스턴스 변수에 직접 접근할 이유가 없다. 따라서 전체공개 모드에서 패키지 멤버에만 공개하는 모드로 선언한다.
패키지 멤버 클래스
다른 클래스 안에 선언되지 않고 별도로 선언된 클래스를 '패키지 클래스'라고 한다.
한 소스파일에 여러개의 클래스를 정의할 수 있지만 유지보수를 위해 한 파일에
하나의 클래스만 정의한다.
nested 클래스
메인 메서드 안에 있는 클래스다.
컴파일 후 메인 메서드 안에 정의된 클래스로 별도의 .class 파일로 추출된다.
=> 따라서 main을 호출할 때마다 클래스 정의가 실행되는 것은 아니다.
이유는 사용범위를 제한하기 위해서이다.
소속 메서드 이외의 메서드 ( 메인 메서드 이외 )에선 nested 클래스를 이용할 수 없다.
public 클래스와 (default) 클래스
default 클래스는 같은 패키지 안에서만 접근이 가능하다.
또한, 다른 패키지 안의 public 클래스를 가져와 사용할 수 없다.
'자바 본 강의' 카테고리의 다른 글
생성자 활용 (0) | 2021.07.28 |
---|---|
클래스와 생성자, 인스턴스 필드와 블록 (0) | 2021.07.27 |
스태틱 / 인스턴스 / 로컬 변수, 스태틱 / 인스턴스메서드 (0) | 2021.07.22 |
스태틱 변수, 인스턴스 변수, 스태틱 메서드, 인스턴스 메서드 (0) | 2021.07.20 |
레퍼런스 리턴하기, 재귀 호출, 메인 메서드와 아규먼트 (0) | 2021.07.16 |