아이템 15. 클래스와 멤버의 접근 권한을 최소화하라 - KwangtaekJung/book-effective-java GitHub Wiki

정보 은닉 혹은 캡슐화

  • 모든 내부 구현은 완벽히 숨기고 오직 API를 통해서만 다른 컴포넌트와 소통한다.
  • 자바는 정보 은닉을 위한 다양한 장치를 제공한다.

접근 제어 메커니즘 (JLS, 6.6)

  • 클래스, 인터페이스, 멈베의 접근성을 명시

  • 각 요소의 접근성은 그 요소가 선언된 위치와 접근 제한자(private, protected, public)로 정해진다.

  • 톨레벨 클래스와 인터페이스에 부여할 수 있는 접근 수준

    • package-private
    • public
  • 멤버(필드, 메서드, 중첩 클래스, 중첩 인터페이스)

    • private: 멤버를 선언한 톱레벨 클래스에서만 접근할 수 있다.
    • package-private: 멤버가 소속된 패키지 안의 모든 클래스에서 접근할 수 있다. (접근 제한자를 명시하지 않았을 때 적용됨.)
    • protected: package-private의 접근 범위를 포함하여, 이 멤버를 선언한 클래스의 하위 클래스에서 접근할 수 있다.
    • public: 모든 곳에서 접근할 수 있다.