Effective Java 스터디
자바의 접근 제어 메커니즘은 클래스, 인터페이스, 멤버의 접근성을 명시한다.
각 요소의 접근성은 그 요소가 선언된 위치와 접근제한자로 정해진다.
이 접근제한자를 제대로 활용하는 것이 정보 은닉의 핵심이다.
기본 원칙은 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다.
패키지 외부에서 쓸 이유가 없다면 package-private으로 선언한다.
public 클래스의 인스턴스 필드는 되도록 public이 아니어야 한다.
public 클래스는 상수용 public static final 필드 외에는 어떠한 pulbic 필드도 가져서는 안 된다.
자바 클래스에는 객체가 가져야 할 구성 멤버가 선언된다.(복수 및 생략가능)
인스턴스 멤버 : 인스턴스를 생성한 후 사용할 수 있는 필드와 메소드.
this : 인스턴스의 자기 자신 의미한다. 주로 필드의 이름과 메소드 또는 생성자의 매개변수의 이름이 동일한 경우, 인스턴스 필드임을 명확히 하기 위해 사용.
정적 멤버 : static. 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드.
필드 선언시 private, 접근자(getter)를 public으로.
-> public 클래스는 가변 필드를 직접 노출해서는 안 된다.
클래스를 불변으로 만들려면..
getter가 있다고 해서 setter를 무조건 만들필요는 없다.
클래스는 꼭 필요가 아니면 불변이어야 한다.
불변으로 만들 수 없는 클래스라도 변경할 수 있는 부분을 최소한으로 줄인다.
합당한 이유가 없다면 모든 필드는 private final이어야 한다.
생성자는 불변식 설정이 모두 완료된, 초기화가 완벽히 끝난 상태의 객체를 생성해야 한다.