클래스와 멤버의 접근 권한은 최소화하라.

잘 설계된 모듈과 그렇지 못한 모듈을 구별 짓는 가장 중요한 속성 하나는 모듈 내부의 데이터를 비롯한 구현 세부사항을 다른 모듈에 잘 감추느냐의 여부다.

이 개념을 정보은닉, 캡슐화 라고 한다. 정보은닉은 여러 가지 이유로 중요한데, 그 대부분은 정보 은닉이 시스템을 구성하는 모듈 사이의 의존성을 낮춰서, 각자 개별적으로 개발하고, 시험하고, 최적화하고, 이해하고, 변경할 수 있다.

자바는 정보 은닉 원칙을 실현할 수 있도록 하는 다양한 도구들을 갖추고 있다, 접근 제어 메커니즘은 클래스와 인터페이스, 그리고 접근 권한을 규정한다. 어떤 개체의 접근권한은 해당 개체가 선언된 위치와 권한 슈정자에 의해 결정된다.(private, protected, public 등). 권한 수정자의 적절한 사용은 저보 은닉 원칙을 실현하는 핵심적 부분이다.

종류 클래스 동일 패키지 하위 클래스 모든 클래스
public O O O O
protected O O O X
package-private O O X X
private O X X X

원칙은 단순하다.

  • 각 클래스와 멤버는 가능한 한 접근 불가능하도록 만들라는것.
  • 객체 필드(instance field)는 절대로 public으로 선언하면 안 된다.
  • 변경 가능 public 필드를 가진 클래스는 다중 스레드에 안전하지 않다.
  • public static final배열 필드를 두거나, 배열 필드를 반환하는 접근자(accessor)를 정의하면 안 된다.

정리

  • 접근 권한은 가능한 낮춰라.
  • 최소한의 public API를 설계한 다음, 다른 모든 클래스, 인터페이스, 멤버는 API에서 제외하라.
  • public static final 필드를 제외한 어떤 필드도 public 필드로 선언하지 마라.
  • public static final 필드가 참조하는 객체는 변경불가능객체로 만들라.
Last Updated: 10/31/2020, 3:49:13 PM