[Effective Java] 아이템 15 - 클래스와 멤버의 접근 권한을 최소화하라

HyeBin, Park·2022년 5월 22일
0

Effective Java Study

목록 보기
11/20
post-thumbnail

아이템 15 : 클래스와 멤버의 접근 권한을 최소화하라

👾 캡슐화 : 소프트웨어 설계의 근간이 되는 원리

  • 잘 설계된 컴포넌트
    -> 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리함
  • 오지 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 전혀 개의치 않음

캡슐화의 장점?

  • 시스템 개발 속도를 높인다.
    -> 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다.
  • 시스템 관리 비용을 낮춘다.
    -> 각 컴포넌트를 더 빨리 파악하여 디버깅 할 수 있고, 다른 컴포넌트로 교체하는 부담도 적다.
  • 성능 최적화에 도움을 준다.
    -> 최적화할 컴포넌트를 정한 다음 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화 가능
  • 소프트웨어 재사용성을 높임
    -> 외부에 거의 의존하지 않고 독자적으로 동작할 수 있는 컴포넌트라면 낯선 환경에서도 유용하게 쓰일 가능성이 크다.
  • 큰 시스템을 제작하는 난이도를 낮춰준다.
    -> 시스템 전체가 아직 완성되지 않은 상태에서도 개별 컴포넌트의 동작을 검증할 수 있다.

🌟 접근 제한자를 제대로 활용하는 것이 정보은닉의 핵심 !

접근 제한자 ?

  • private : 멤버를 선언한 톱레벨 클래스에서만 접근 가능
  • package-private : 멤버가 소속된 패키지 안의 모든 클래스에서 접근 가능
  • protected :멤버를 선언한 클래스의 하위클래스에서도 접근할 수 있다.
  • public : 모든 곳에서 접근 가능

🐻 기본 원칙 : 모든 클래스와 멤버의 접근성을 가능한 한 좁혀라 !

톱레벨 클래스와 인터페이스 -> package-private, public

  • 패키지 외부에서 사용할 이유가 없다면 package-private로 선언하자
    -> API가 아닌 내부 구현이 되어 언제든 수정할 수 있다.
    -> 클라이언트에 아무런 피해 없이 다음 릴리스에서 수정, 교체, 제거할 수 있다.
  • 한 클래스에서만 사용하는 package-private 톱레벨 클래스나 인터페이스는 이를 사용하는 클래스 안에 private static으로 중첩 시켜보자
    -> 바깥 클래스 하나에서만 접근할 수 있다.
  • public일 필요가 없는 클래스의 접근 수준을 package-private 톱레벨 클래스로 좁히자
    -> public 클래스는 크 패키지의 API인 반면, package-private 톱레벨 크래스는 내부 구현이기 때문

멤버(필드, 메서드, 중첩 클래스, 중첩 인터페이스) -> 4가지 다

  • 클래스의 공개 API를 설계 후 그 외의 모든 멤버는 private로 만들고, 오직 같은 패키지의 다른 클래스가 접근해야하는 멤버에 한하여 package-private로 만들자
    -> 권한을 풀어주는 일을 자주 하게 된다면 컴포넌트를 더 분해해야하는것은 아닌지 고민해보자
  • public 클래스의 인스턴스 필드는 되도록 public이 아니어야한다.
    -> public 가변 필드를 갖는 클래스는 일반적으로 스레드 안전하지 않다.

0개의 댓글