공부기록

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

JAVA

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

gracelove91 2019. 12. 1. 13:02
반응형

클래스와 멤버의 접근권한을 최소화하라.

잘 설계된 컴포넌트?

  • 잘 설계된 컴포넌트는 바로 클래스 내부 데이터와 내부 구현정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐로 판단.
  • 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 api를 깔끔히 분리.
  • 오직 api로만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 관심도 없다. (정보은닉, 캡슐화)

정보은닉의 장점.

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

정보은닉을 위한 장치

  • 접근제한자.
    • 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야한다.
    • 패키지외부에서 쓸 이유 없다면 package-priave으로 선언하자. 그럼 내부구현이 되어 언제든 수정할 수 있다.
      • public으로 선언한다면 api가 되므로 영웡히 관리 필요.
    • 한 클래스에서'만' 사용하는 package-private 톱레벨 클래스나 인터페이스는 이를 사용하는 클래스 내에 private static으로 중첩시키자.
    • 공개 API를 설계한 후 그 외의 모든 멤버들은 private으로 만들자. 그런 다음 같은 패키지의 다른 클래스가 접근해야 하는 멤버에 한하여 package-private으로 풀어주자.
반응형