이런 클래스는 데이터 필드를 직접 조작할 수 있어서 캡슐화의 이점을 누릴수가 없다. 불변식도 강제할 수 없고, 필드를 사용하는 순간에 어떤 동작이 실행되도록 만들수도 없다. 이러한 클래스는 private필드와 public 접근자 메서드(getter)로 바꿔야 한다.
선언된 패키지 밖에서도 사용 가능한 클래스에는 접근자 메서드를 제공하라. 그래야 클래스 내부 표현을 자유로이 수정할 수 있게 된다.
하지만 package-private 클래스나 private 중첩 클래스는 데이터 필드를 공개하더라도 잘못이라 말할 수 없다. 클래스의 내용을 제대로 기술하기만 한다면, 접근자 메서드보다는 시각적으로 깔끔하다. private 중첩 클래스의 경우는, 그 클래스의 바깥 클래스 외부의 코드는 아무 영향도 받지 않을 것이기 떄문이다.
요약
public 클래스는 변경 가능 필드를 외부로 공개하면 안된다. 변경 불가능 필드인 경우에는 외부로 공개하더라도 많이 위험하진 않겠지만, 그럴 필요가 없다고 생각된다. 하지만 package-private나 private로 선언된 중첩 클래스의 필드는 그 변경 가능 여부와는 상관없이 외부로 공개하는 것이 바람직할 때도 있다.
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[클래스와 인터페이스]규칙16. 계승하는 대신 구성하라 (0) | 2017.04.24 |
---|---|
[클래스와 인터페이스]규칙15. 변경 가능성을 최소화하 (0) | 2017.04.24 |
[클래스와 인터페이스]규칙13. 클래스와 멤버의 접근 권한은 최소화하라 (0) | 2017.04.22 |
[모든 객체의 공통 메서드]규칙12.Comparable 구현을 고려하라 (0) | 2017.04.20 |
[모든 객체의 공통 메서드]규칙11.clone을 재정의할 때는 신중하라 (0) | 2017.04.19 |