본문 바로가기

공부 기록/Java

[이펙티브 자바 3/E] 아이템15 - 클래스와 멤버의 접근 권한을 최소화하라

- 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다.

 

정보 은닉의 장점

- 시스템 개발 속도를 높인다.

- 시스템 관리 비용을 낮춘다.

- 성능 최적화에 도움을 준다.

- 소프트웨어 재사용성을 높인다.

- 큰 시스템을 제작하는 난이도를 낮춰준다.


- 자바는 정보 은닉을 위한 다양한 장치를 제공한다. => 그중 접근 제어 메커니즘은 클래스, 인터페이스, 멤버의 접근성(접근 허용 범위)을 명시한다.

- 기본 원칙 : 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다.

- 한 클래스에서만 사용하는 package-private 톱레벨 클래스나 인터페이스는 이를 사용하는 클래스 안에 private static으로 중첩시켜보자(아이템 24).

- public일 필요가 없는 클래스의 접근 수준을 package-private 톱레벨 클래스로 좁혀보자.

- 권한을 풀어주는 일을 자주 하게 된다면 여러분 시스템에서 컴포넌트를 더 분해해야 하는 것은 아닌지 다시 고민해보자.


- public 클래스의 인스턴스 필드는 되도록 public이 아니어야 한다(아이템 16). => 필드가 가변 객체를 참조하거나, final이 아닌 인스턴스 필드를 public으로 선언하면 그 필드에 담을 수 있는 값을 제한할 힘을 잃게 된다. => public 가변 필드를 갖는 클래스는 일반적으로 스레드 안전하지 않다.

- 클래스가 표현하는 추상 개념을 완성하는 데 꼭 필요한 구성요소로써의 상수라면 public static final 필드로 공개해도 좋다. => 이런 필드는 반드시 기본 타입 값이나 불변 객체를 참조해야 한다(아이템 17).


[핵심 정리]

프로그램 요소의 접근성은 가능한 한 최소한으로 하라. 꼭 필요한 것만 골라 최소한의 public API를 설계하자.