Link
Today
Total
05-20 09:23
Archives
관리 메뉴

초보개발자 긍.응.성

(이펙티브 자바 3) 15. 클래스와 멤버의 접근 권한을 최소화하라 본문

책 정리/이펙티브 자바 3

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

긍.응.성 2020. 10. 9. 00:45
반응형

정보은닉을 위해 사용하는 접근 제한자와, 접근 제한자의 사용법을 알아보자.

정보 은닉의 장점

  • 여러 컴포넌트를 병렬로 개발하여 시스템 개발 속도를 높인다.
  • 각 컴포넌트를 더 빨리 파악하여 디버깅 할 수 있고, 다른 컴포넌트로 교체하는 비용도 적기 때문에 시스템 관리 비용을 낮춘다.
  • 성능 최적화에 도움을 준다.
  • 소프트 웨어 재사용성을 높인다.
  • 개별 컴포넌트들의 동작을 검증할 수 있기에, 큰 시스템을 제작하는 난이도를 낮춰준다.

접근 제한자

정보 은닉을 위해 자바에서는 접근 제한자를 활용한다.

  • 기본 원칙: 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다
  • 접근 제한자의 종류
    • private: 멤버를 선언한 톱레벨 클래스에서만 접근할 수 있다.
    • package-private: 멤버가 소속된 패키지 안의 모든 클래스에서 접근할 수 있다. 접근 제한자를 명시하지 않았을 때 적용되는 패키지 접근 수준이다.
    • protected: 기본적으로 package-private이며, 이 멤버를 선언한 클래스의 하위 클래스에서도 접근할 수 있다.
    • public: 모든 곳에서 접근할 수 있다.

접근 제한자 사용 방법

  • 톱레벨 클래스와 인터페이스에 부여할 수 있는 접근 수준은 package-private와 public이다
  • public으로 선언 시, 공개 API가 된다.
    • 클라이언트가 사용할 수 있으므로, 하위 호환을 위해 영원히 관리해주어야 한다.
  • package-private으로 선언 시 해당 패키지 안에서만 사용할 수 있다.
    • 공개된 API가 아닌 내부 구현이므로 수정되어도 클라이언트에게 피해가 가지 않는다.
  • 한 클래스에서만 사용하는 package-private 톱레벨 클래스나 인터페이스는 내부 정적 클래스(private static)로 사용하자
  • private static 클래스로 설정함으로, 이름 품고 있는 바깥 클래스에서만 접근할 수 있다.
  • public 클래스의 protected 멤버는 공개 API이므로 영원히 지원돼야 한다.
  • public 클래스의 인스턴스 필드는 되도록 public이 아니어야 한다.
    • 공개된 불변의 상수 값이라면 public static final 필드로 공개할 수 있다.
  • 길이가 0이 아닌 배열은 변경가능하니 Collections.unmodifiableList()를 사용하여 리스트를 선언하자.

Test를 위한 접근 제한자 지정

  • 테스트를 위해 public 클래스의 private 멤버를 package-private으로 풀어줄 수 있다.

정리

정보은닉은 다양한 장점을 제공하며, 접근 제한자를 이용하여 지정할 수 있다. 접근 제한자를 사용할 때 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다. API로 제공하려는 것만 public으로 두고 나머지는 최대한 좁게 설정하자.

반응형
Comments