이펙티브 자바:: 아이템 15 <클래스와 멤버의 접근 권한을 최소화하라>
🙈

이펙티브 자바:: 아이템 15 <클래스와 멤버의 접근 권한을 최소화하라>

Created
Aug 21, 2024 02:05 AM
Last edited time
Last updated August 22, 2024
Tags
Language
Language
Java
URL

Intro::

이펙티브 자바 정리본입니다.
 

결론

  • 프로그램 요소의 접근성은 가능한 최소한으로 해야 합니다.
  • 오직 같은 패키지의 다른 클래스가 접근해야 하는 멤버에 한하여 package-private으로 풀어주자.
  • 상위 클래스의 메서드를 재정의할 때는 그 접근 수준을 상위 클래스에서보다 좁게 설정할 수 없습니다. 이는 리스코프 치환 원칙을 지키기 위해 필요합니다.
  • 테스트만을 위해 클래스, 인터페이스, 멤버를 공개 API로 만들어서는 안됩니다.
  • public 클래스의 인스턴스 필드는 되도록 public이 아니어야 합니다.
    • public이게 된다면 불변식을 보장할 수 없기 때문입니다.
    • 또한 가변 필드를 갖는 클래스는 일반적으로 스레드 안전하지 않기 때문입니다.
  • 정적 필드도 마찬가지이나, 예외로 해당 클래스가 표현하는 추상 개념을 완성하는 데 필요한 상수라면 public static final 필드로 공개해도 좋습니다.
  • 클래스에서 public static final 배열 필드를 두거나 이 필드를 반환하는 접근자 메서드를 제공해서는 안됩니다.
    • // 보안 허점이 숨어 있다. public static final Thing[] VALUES = { ... }; // 해결책 1 - 불변 리스트 추가 private static final Thing[] PRIVATE_VALUES = { ... }; public static final List<Thing> VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES)) // 해결책 2 - 방어적 복사 private static final Thing[] PRIVATE_VALUES = { ... }; public static final Thing[] values() { return PRIVATE_VALUES.clone(); }

정보 은닉의 장점

  • 시스템 개발 속도를 높입니다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문입니다.
  • 시스템 관리 비용을 낮춥니다.
  • 정보 은닉 자체가 성능을 높여주지는 않지만, 성능 최적화에 도움을 줍니다.
  • 소프트웨어 재사용성을 높입니다.
  • 큰 시스템을 제작하는 난이도를 낮춰줍니다.
 

접근제어자

  • private
    • 같은 클래스 내에서만 접근 가능합니다.
  • package-private(default)
    • 같은 패키지 내에서만 접근 가능합니다.
  • protected
    • 같은 패키지거나 상속을 받는다면 접근 가능합니다.
  • public
    • 모든 곳에서 접근 가능합니다.
 
 
 

References::

이펙티브 자바 / 조슈아 블로크 지음 (프로그래밍 인사이트)

Loading Comments...