4장 클래스와 인터페이스
자바 언어의 심장 클래스와 인터페이스
추상 클래스 vs 인터페이스

클래스와 멤버의 접근 권한을 최소화하라
어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼는냐다.
정보 은닉의 장점
- 여러 컴포넌트를 병렬로 개발할 수 있기 때문에 시스템 개발 속도를 높인다.
- 시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅할 수 있고, 다른 컴포넌트로 교체하는 부담도 덜어주기 때문
- 정보 은닉 자체가 성능을 높여주지는 않지만, 성능 최적화에 도움을 준다. 완성된 시스템을 프로파일링해 최적화할 컴포넌트를 정한 다음 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화할 수 있기 때문이다.
- 소프트웨어 재사용성을 높인다. 외부에 거의 의존하지 않고 독자적으로 동작 가능한 컴포넌트라면 낯선 환경에서도 유용하게 쓰일 가능성이 높다.
- 큰 시스템을 제작하는 난이도를 낮춰준다. 시스템 전체가 완성되지 않아도 개별로 동작할 수 있기 때문이다.
모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다.
톱레벨 클래스나 인터페이스를 public으로 선언하면 공개 API가 되며, package-private(default)으로 선언하면 해당 패키지 안에서만 사용할 수 있다. 패키지 외부에서 쓸 이유가 없다면 package-private로 선언하자.
- package-private로 선언하면 좋은 이유 - 오픈 소스 개발
클래스의 공개 API를 세심히 설계한 후, 그 외의 모든 멤버는 private으로 만들자.