Java ‐ 클래스와 멤버의 접근 권한을 최소화하라[Effective Java Item 15] - dnwls16071/Backend_Summary GitHub Wiki
클래스와 멤버의 접근 권한을 최소화하라
- 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐이다.
- 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 분리한다.
- 오직 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 간섭하지 않는다.
- 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리이다.
정보 은닉의 장점
- 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다.
- 시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅을 할 수 있고, 다른 컴포넌트로 교체하는 부담도 적다.
- 정보 은닉 자체가 성능을 높여주지는 않으나 성능 최적화에 도움을 준다.
- 소프트웨어 재사용성을 높인다. 외부에 거의 의존하지 않고 독자적으로 동작할 수 있는 컴포넌트라면 그 컴포넌트와 함께 개발되지 않은 낯선 환경에서도 유용하게 쓰일 가능성이 높다.
- 큰 시스템을 제작하는 난이도를 낮춰준다
- 결과적으로 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다. 달리 말해, 소프트웨어가 올바르게 동작하는 한 항상 가장 낮은 접근 수준을 부여해야 한다.
|
해당 클래스 안에서 접근 가능? |
같은 패키지 안에서 접근 가능? |
상속받은 클래스에서 접근 가능? |
외부에서 접근 가능? |
| public |
O |
O |
O |
O |
| protected |
O |
O |
O |
X |
| package-private |
O |
O |
X |
X |
| private |
O |
X |
X |
X |
- 정말로 꼭 필요한 것만 골라 최소한의 public API를 설계하자. public 클래스는 상수(불변) 외에는 public 필드를 가지면 안 된다.