Java/Effective Java
[Effective Java] Item 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라
안도일
2023. 3. 21. 19:19
인스턴스 필드들을 모아놓을 일 외에는 아무 목적도 없는 퇴보한 클래스를 작성하려 할 때가 있는데, 대표적으로 x, y의 좌표를 표현하는 Point 클래스가 있다.
이런 클래스는 데이터 필드에 직접 접근할 수 있으므로 캡슐화의 이점을 제공하지 못한다. 따라서 필드를 모두 private으로 바꾸고 접근자(getter)를 추가하자.
패키지 바깥에서 접근할 수 있는 클래스라면 getter를 제공함으로써 클래스 내부 표현 방식을 언제든 바꿀 수 있는 유연성을 얻을 수 있다.
단, package-private 클래스 혹은 private 중첩 클래스라면 데이터를 노출한다해도 문제가 없다.
-> 오히려 접근자 방식보다 훨씬 깔끔하다.
불변식 보장
public 클래스의 필드가 불변(public final)이라면 직접 노출할 때의 단점이 조금 줄어들지만 좋은 생각은 아니다.
API를 변경하지 않고는 표현방식을 변경할 수 없고, 필드를 읽을 때 부수 작업을 수행할 수 없다는 단점은 여전하다.
하지만 불변식은 보장할 수 있게 되는데 다음이 그 예다
위 클래스는 각 인스턴스가 유효한 시간임을 보장한다.