- 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다.
정보 은닉의 장점
- 시스템 개발 속도를 높인다.
- 시스템 관리 비용을 낮춘다.
- 성능 최적화에 도움을 준다.
- 소프트웨어 재사용성을 높인다.
- 큰 시스템을 제작하는 난이도를 낮춰준다.
- 자바는 정보 은닉을 위한 다양한 장치를 제공한다. => 그중 접근 제어 메커니즘은 클래스, 인터페이스, 멤버의 접근성(접근 허용 범위)을 명시한다.
- 기본 원칙 : 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다.
- 한 클래스에서만 사용하는 package-private 톱레벨 클래스나 인터페이스는 이를 사용하는 클래스 안에 private static으로 중첩시켜보자(아이템 24).
- public일 필요가 없는 클래스의 접근 수준을 package-private 톱레벨 클래스로 좁혀보자.
- 권한을 풀어주는 일을 자주 하게 된다면 여러분 시스템에서 컴포넌트를 더 분해해야 하는 것은 아닌지 다시 고민해보자.
- public 클래스의 인스턴스 필드는 되도록 public이 아니어야 한다(아이템 16). => 필드가 가변 객체를 참조하거나, final이 아닌 인스턴스 필드를 public으로 선언하면 그 필드에 담을 수 있는 값을 제한할 힘을 잃게 된다. => public 가변 필드를 갖는 클래스는 일반적으로 스레드 안전하지 않다.
- 클래스가 표현하는 추상 개념을 완성하는 데 꼭 필요한 구성요소로써의 상수라면 public static final 필드로 공개해도 좋다. => 이런 필드는 반드시 기본 타입 값이나 불변 객체를 참조해야 한다(아이템 17).
[핵심 정리]
프로그램 요소의 접근성은 가능한 한 최소한으로 하라. 꼭 필요한 것만 골라 최소한의 public API를 설계하자.
'공부 기록 > Java' 카테고리의 다른 글
[JPA] 6장 - 다양한 연관관계 매핑(1) - 다대일, 일대다 (0) | 2023.09.07 |
---|---|
[이펙티브 자바 3/E] 아이템16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 (0) | 2023.08.26 |
[JPA] 5장 - 연관관계 매핑 기초(3) - 양방향 연관관계 (0) | 2023.08.18 |
[JPA] 5장 - 연관관계 매핑 기초(2) - 연관관계 사용 (0) | 2023.08.11 |
[이펙티브 자바 3/E] 아이템14 - Comparable을 구현할지 고려하라 (0) | 2023.08.09 |