잘 설계된 컴포넌트는
내부 데이터와 구현정보를 외부 컴포넌트로 부터 잘 숨기고 오로지 API를 통해서만 통신해야 한다. 이를 캡슐화(정보은닉)이라 부른다.
캡슐화가 잘 되어 있으면
여러 컴포넌트를 병렬로 개발할 수 있고
컴포넌트 교체에 부담이 가지 않아 성능 향상에 일조하고
작은 컴포넌트부터 하나씩 개발하여 시스템 제작난이도를 낮추어 준다.
접근제어자를 잘 사용하는 것이 정보 은닉의 핵심이다.
톱레벨 클레스 ( 가장 바깥 클래스 ) 와 인터페이스
private : 톱레벨 클래스에서만 접근 가능 ( 중첩된 클래스 )
public : 외부 패키지에서 접근가능, 해당 클래스를 상속하는 외부 패키지 ( 하위호환 )을 관리해야 함
package-private : 패키지 내부의 모든 클래스가 접근 가능, 내부 구현으로 언제든 수정 가능
protected : package-private의 접근 범위이고 자식 클래스에서 접근 가능
1) public 클래스의 인스턴스 필드는 public이 아니어야 한다.
외부에서 누구나 접근 가능하므로 멀티 스레드 환경에서 안전하지 않다. 철저한 객체지향 프로그래머는 getter를 제공한다.
2) public으로 선언 가능한 필드는 static final 상수밖에 없다.
3) 상수가 배열 같은 자료구조라면 고려해야 할 부분이 있다. 배열에 대한 참조는 불변하지만 배열 안의 인스턴스에 대한 조작은 가능하다. 그러므로 public으로 필드나 접근 메소드를 제공하면 안된다. private으로 선언하고 복사본을 외부로 노출하거나 해야 한다.
꼭 필요한 것만 골라 최소한의 public API를 설계해야 한다. 필드는 public static final 외에는 어떤 public 필드도 가져서는 안된다.
'Dev > JAVA' 카테고리의 다른 글
[Effective JAVA] 상속보다는 컴포지션을 사용하라. ( 아이템 18 ) (0) | 2024.03.21 |
---|---|
[Effective JAVA] 변경가능성을 최소화 하라. ( 아이템 17 ) (0) | 2024.03.21 |
[Effective JAVA] 불필요한 객체 생성을 피하라 ( 아이템6 ) (0) | 2024.03.20 |
[Effective JAVA] 자원을 직접 명시하지 말고 의존객체 주입을 사용하라. ( 아이템5 ) (0) | 2024.03.20 |
[Effective JAVA] 인스턴스화를 막으려거든 private 생성자를 사용하라. ( 아이템 4 ) (0) | 2024.03.20 |