인스턴스 필드들을 모아놓을 일 외에는 아무 목적도 없는 퇴보한 클래스를 작성하려 할 때가 있는데, 대표적으로 x, y의 좌표를 표현하는 Point 클래스가 있다.
이런 클래스는 데이터 필드에 직접 접근할 수 있으므로 캡슐화의 이점을 제공하지 못한다. 따라서 필드를 모두 private으로 바꾸고 접근자(getter)를 추가하자.
패키지 바깥에서 접근할 수 있는 클래스라면 getter를 제공함으로써 클래스 내부 표현 방식을 언제든 바꿀 수 있는 유연성을 얻을 수 있다.
단, package-private 클래스 혹은 private 중첩 클래스라면 데이터를 노출한다해도 문제가 없다.
-> 오히려 접근자 방식보다 훨씬 깔끔하다.
불변식 보장
public 클래스의 필드가 불변(public final)이라면 직접 노출할 때의 단점이 조금 줄어들지만 좋은 생각은 아니다.
API를 변경하지 않고는 표현방식을 변경할 수 없고, 필드를 읽을 때 부수 작업을 수행할 수 없다는 단점은 여전하다.
하지만 불변식은 보장할 수 있게 되는데 다음이 그 예다
위 클래스는 각 인스턴스가 유효한 시간임을 보장한다.
'Java > Effective Java' 카테고리의 다른 글
[Effective Java] Item 18. 상속보다는 컴포지션을 사용하라 (0) | 2023.03.25 |
---|---|
[Effective Java] Item 17. 변경 가능성을 최소화하라 (0) | 2023.03.25 |
[Effective Java] Item 15. 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2023.03.21 |
[Effective Java] Item 14. Comparable을 구현할지 고려하라 (1) | 2023.03.21 |
[Effective Java] Item 13. clone 재정의는 주의해서 진행하라 (0) | 2023.03.20 |