[WHY]
잘 설계된 컴포넌트는 얼마나 정보 은닉(캡슐화)를 고려했는지 여부이다.
내부 요소를 외부에 최소한으로 노출하기 위해서 접근 권한을 최소화하는 것이다.
[WHEN]
컴포넌트를 설계할 때.
[HOW]
- 꼭 필요한 것만 골라 최소한의 public API를 설계하자. 그 외에는 클래스, 인터페이스, 멤버가 의도치 않게 API로 공개되는 일이 없도록 해야 한다.
- public 클래스는 상수용 public static final 필드 외에는 어떠한 public 필드도 가져서는 안 된다.
- public static final 필드가 참조하는 객체가 불변인지 확인하라.
[캡슐화]
정보 은닉(캡슐화)의 장점
- 시스템 개발 속도를 높인다.
- 시스템 관리 비용을 낮춘다.
- 성능 최적화에 도움을 준다.
- 소프트웨어 재사용성을 높인다.
정보 은닉 기본원칙
- 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다.
상위 클래스의 메서드를 재정의할 때는 그 접근 수준을 상위 클래스보다 좁게 설정할 수 없다. 확장은 가능하다.
public class Parent{
void method(){}//package-private
}
public class Child{
@Override
public void method(){}//가능
@Override
private void method(){}//불가능
}
주의점
- public 클래스의 인스턴스 필드는 되도록 public이 아니어야한다.
- public 가변 필드를 갖는 클래스는 일반적으로 스레드 안전하지 않다.
- 클래스에서 public static final 배열 필드를 두거나 이 필드를 반환하는 접근자 메서드를 제공해서는 안된다.
- 배열의 참조값을 안다면 배열의 내용을 수정할 수 있기 때문에 위험하다.
- 꼭 필요하다면 복제된 배열을 전달하거나 불변리스트
Collections.UnmodifiableList()
를 사용하는 것이다.
모듈 시스템 : Java 9
모듈 : 자신에 속하는 패키지 중 공개 (export) 할 것들을 선언한다. [module-info.java 파일에]
클래스를 외부에 공개하지 않으면서도 같은 모듈을 이루는 패키지 사이에서 자유롭게 공유할 수 있다.
암묵적 접근 수준 : public, protected 수준의 효과가 모듈 내부로 한정된다.
'programming > java' 카테고리의 다른 글
Item 14. Comparable을 구현할지 고려하라. (0) | 2023.04.19 |
---|---|
Item 13. clone 재정의는 주의해서 진행하라. (0) | 2023.04.18 |
Item 12. toString을 항상 재정의하라. (0) | 2023.04.17 |
Item 11. equals 재정의할 때 hashCode도 정의하라 (0) | 2023.03.29 |
Item 10. equals 일반 규약을 지켜 재정의하라 (0) | 2023.03.28 |