[effective java] 4장 item15 - 클래스와 멤버의 접근 권한을 최소화하라
2019-02-12
4장 클래스와 인터페이스
추상화의 기본 단위인 클래스와 인터페이스..! 는 자바 언어의 심장!! 그 설계에 사용하는 강력한 요소가 많이 있다.
이런 요소를 적절히 활용하여 클래스와 인터페이스를 쓰기 편하고, 견고하며, 유연하게 만드는 방법을 안내한다.
잘 설계된 컴포넌트?
클래스 내부 데이터와 내부 구현정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐다. (정보은닉, 캡슐화) -> 구현과 API를 깔끔히 분리함
정보 은닉의 장점
- 시스템 개발 속도를 높인다.
- 시스템 관리 비용을 낮춘다.
- 성능 최적화에 도움을 준다.
- 소프트웨어 재사용성을 높인다.
- 큰 시스템을 제작하는 난이도를 낮춰준다.
정보 은닉을 위한 다양한 장치? 접근 제한자 !
접근 제한자를 제대로 활용하는 것이 정보 은닉의 핵심이다.
모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다.
소프트웨어가 올바로 동작하는 한 항상 가장 낮은 접근 수준을 부여해야 한다.
접근 수준 네 가지
- private
- package-private
- protected
- public
자바 9 에서부터 모듈 시스템이라는 개념이 도입되면서 추가된 암묵적 접근 수준 두가지
패키지중 공개(export)할 것들을 선언하게 되는데 공개하지 않으면 public 멤버라도 외부에서 접근X 효과가 모듈 내부로 한정되는 변종
모듈경로가 아닌 애플리케이션의 클래스패스에 두면 그 모듈 안의 모든 패키지는 모듈이 없는 것처럼 행동한다. (모두 밖에서 접근가능)
ex)JDK 자체가 적극 활용한 사례.
클래스의 공개 API를 세심히 설계한 후, 그외의 모든 멤버는 private으로.
테스트의 목적으로 적당한 수준으로 넓혀도 되지만 공개 API로 만들어서는 안 된다.
public 클래스는 상수용 public static final 필드 외에는 어떠한 public 필드도 가져서는 안된다.
public static final 필드가 참조하는 객체가 불변인지 확인하라.