728x90
1. 개념
- 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 클래스의 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼는지.
- 잘 설계된 컴포넌트는 구현과 API를 깔끔히 분리.
- API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 전혀 개의치 않음.
-> 이는 정보 은닉, 캡슐화
2. 정보 은닉의 장점
- 시스템 개발 속도를 높임. -> 여러 컴포넌트를 병렬로 개발할 수 있기 때문.
- 시스템 관리 비용을 낮춤. -> 각 컴포넌트를 더 빨리 파악하여 디버깅 가능하고, 다른 컴포넌트로 교체하는 부담도 적음.
- 성능 최적화에 도움을 줌.
- 재사용성을 높여줌.
- 큰 시스템 제작의 난이도를 낮춰줌. -> 시스템 전체가 완성되지 않은 상태에서도 개별 컴포넌트의 테스트가 가능.
3. 정보 은닉 방법
- 접근 제한자
private: 멤버를 선언한 톱레벨 클래스에서만 접근 가능.
package-private: 멤버가 소속된 패키지 안의 모든 클래스에서 접근 가능.
protected: package-private의 접근 범위를 포함하며, 이 멤버를 선언한 클래스의 하위 클래스에서도 접근할 수 있음.
public: 모든 곳에서 접근 가능.
- 주의사항
- public 클래스의 인스턴스 필드는 되도록 public이 아니어야 함.
- final이 아닌 인스턴스 필드를 public으로 선언하면 그 필드에 담을 수 있는 값을 제한할 수 없음.
- public 가변 필드를 갖는 클래스는 일반적으로 스레드 안전하지 않음.
- 클래스에서 public static final 배열 필드를 두거나 이 필드를 반환하는 접근자 메소드를 제공하면 안됨.
4. 핵심정리
- 프로그램 요소의 접근성은 가능한 한 최소한으로.
- 꼭 필요한 것만 골라 최소한의 public API로 설계.
- public 클래스는 상수용 public static final 필드 외에는 어떠한 public 필드도 가져서는 안됨.
- public static final 필드가 참조하는 객체가 불변인지 확인.
728x90
'개발 > Java & Kotlin' 카테고리의 다른 글
[JPA] N+1 해결하기 (1) | 2023.03.07 |
---|---|
[Java] Raw 타입은 사용하지 말기 (0) | 2023.01.23 |
[Java] File 입출력 (0) | 2023.01.13 |
[Java] try-with-resources 사용하기 (0) | 2023.01.12 |
[Java] private 생성자로 인스턴스화 막기, 의존 객체 주입 사용하기 (2) | 2023.01.09 |