Item 15 : 클래스와 멤버의 접근 권한을 최소화하라
2021. 7. 14. 23:03
이번장은 은닉화, 캡슐화와 관련된 내용이다.
최대한 외부에서 내부 구현 정보를 알 수 없게 하는것이 객체 지향적인 설계이다.
정보 은닉의 장점은
- 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다.
- 시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅할 수 있고, 다른 컴포넌트로 교체하는 부담도 적기 때문이다.
- 정보 은닉 자체가 성능을 높여주지는 않지만 성능 최적화에 도움을 준다. 완성된 시스템을 프로파일링해 최적화할 컴포넌트를 정한 다음 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화할 수 있기 때문이다.
- 소프트웨어 재사용성을 높인다. 외부에 거의 의존하지 않고 독자적으로 동작 할 수 있는 컴포넌트라면 그 컴포넌트와 함께 개발되지 않은 낯선 환경에서도 유용하게 쓰일 가능성이 크기 때문이다.
- 큰 시스템을 제작하는 난이도를 낮춰준다. 시스템 전체가 아직 완성되지 않은 상태에서도 개별 컴포넌트의 동작을 검증할 수 있기 때문이다.
그 중에서도 정보 은닉을 위해 접근성을 어떻게 관리 해야 하는가이가 이번장의 키 포인트이다.
자바의 접근 제어자는
1. private : 해당 클래스에서만 접근 가능
2. default : 기본값, 해당 패키지 내에서만 접근 가능
3. protected : 동일 패키지내의 클래스 또는 해당 클래스를 상속받은 외부패키지의 클래에서 접근 가능
4. public : 어떤 클래스에서라도 접근 가능
총 4가지이며 1에서 4로 갈수록 더 많은 접근을 허용한다.
책에서 추천하는 방법
클래스의 공개 API를 세심히 설계한다(public) ->
그 외의 모든 멤버는 private으로 설정 ->
같은 패키지의 다른 클래스가 접근해야 하는 멤버에 한하여 default로 변경->
너무 자주 풀어준다면 설계가 잘못된 것일수도 있다.
++ 고려사항 : Serializable을 구현한 클래스에서는 그 필드들도 의도치 않게 공개 API가 될 수 있음
public 클래스의 인스턴스 필드는 되도록 public이 아니어야 함
그렇지 않으면
- 불변식을 보장할 수 없게 된다.
- thread-safe하지 않다.
- 내부 구현 변경시 연결된 다른 소스코드 모두를 찾아가 수정해야 함
but, 상수의 경우 public static final 필드로 공개해도 됨
정리
프로그램 요소의 접근성을 가능한 한 최소화
'책 > 이펙티브자바' 카테고리의 다른 글
Item 17 : 변경 가능성을 최소화 하라 (0) | 2021.07.16 |
---|---|
Item 16 : public 클래스에서는 public 필드가 아닌 접근자 메소드를 사용하라 (0) | 2021.07.15 |
Item 14 : Comparable을 구현할지 고려하라 (0) | 2021.07.13 |
Item 13 : clone 재정의는 주의해서 진행하라 (0) | 2021.07.12 |
Item 12 : toString을 항상 재정의하라 (0) | 2021.07.12 |