본문 바로가기
공부/이펙티브자바

[이펙티브자바]item 15. 클래스와 멤버의 접근 권한을 최소화하라

by 띵커베르 2023. 1. 19.
728x90
  •   구현과 API 분리하는 정보은닉 장점
    • 시스템 개발 속도를 높인다
      • 인터페이스 설계시 사용하는 쪽과 지원하는 쪽이 동시에 개발이 가능하다.
    • 시스템 관리 비용을 낮춘다
      • 컴포넌트를 더 빨리 파악할 수 있기 떄문에, 인터페이스 위주로 빠르게 파악이 가능하다
    • 소스프퉤어 재사용성을 높인다
      • 모듈화가 잘되어 있따면 병목지점을 빠르게 찾아서 처리할 수 있다.
    • 시스템 개발 난이도를 낮춘다
      • 큰 시스템을 개발할때 작은 단위로 나눠서 구현하다보면 전체를 구현할 수 있다.
  • 모든 클래스와 멤버의 정급성을 가능한 한 좁혀야 한다.
  • 톱레벨 클래스와 인터페이스에 pakage-private(default) 또는 public 을 쓸 수 있다.
    • public 으로 선언하면 API가 되므로 하위 호환성을 유지하려면 계속 관리해야 한다.
    • 패키지 외부에서 쓰지 않을 클래스나 인터페이스라면 pakage-private 로 선언하자.
  • 한 클래스에서만 사용하는 pakage-private 클래스나 인터페이스는 해당 클래스에 private static 으로 중첩 시키자
    • 한 클래스에서만 사용하니깐 굳이 나눌필요가 없다는 뜻 같다, 하지만 왜 static 키워드로 중첩 시키자 했을까? 그냥 private class 도 있는데..?
      • 내부 private class 는 외부 클래스 인스턴스를참조하는 필드가 자동으로 생성된다.
      • 내부 private static class 로 선언된 클래스는 중첩클래스이긴 하나, 남남과 같은 상태의 클래스다.(별개의 클래스라 봐도 무방함)
  • package-private 에서 protected 로 변경하지말자.상속받은 클래스에서도 사용가능하기에 범위가 아주 넓어진다.
  • public 클래스의 인스턴스 필드는 되도록 public이 아니여야 한다(아이템16 에서 계속..)
  • 클래스에서 public static final 필드의 경우 배열같은 참조가능한 객체로 제공해 주지말자 내부를 변경할 수 있기 때문이다.
728x90

댓글