초보개발자 긍.응.성
(이펙티브 자바 3) 15. 클래스와 멤버의 접근 권한을 최소화하라 본문
반응형
정보은닉을 위해 사용하는 접근 제한자와, 접근 제한자의 사용법을 알아보자.
정보 은닉의 장점
- 여러 컴포넌트를 병렬로 개발하여 시스템 개발 속도를 높인다.
- 각 컴포넌트를 더 빨리 파악하여 디버깅 할 수 있고, 다른 컴포넌트로 교체하는 비용도 적기 때문에 시스템 관리 비용을 낮춘다.
- 성능 최적화에 도움을 준다.
- 소프트 웨어 재사용성을 높인다.
- 개별 컴포넌트들의 동작을 검증할 수 있기에, 큰 시스템을 제작하는 난이도를 낮춰준다.
접근 제한자
정보 은닉을 위해 자바에서는 접근 제한자를 활용한다.
- 기본 원칙: 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다
- 접근 제한자의 종류
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으로 두고 나머지는 최대한 좁게 설정하자.
반응형
'책 정리 > 이펙티브 자바 3' 카테고리의 다른 글
(이펙티브 자바 3) 20. 추상 클래스보다는 인터페이스를 우선하라 (0) | 2020.10.19 |
---|---|
(이펙티브 자바 3) 18. 상속보다는 컴포지션을 사용하라 (0) | 2020.10.17 |
(이펙티브 자바 3) 17. 변경 가능성을 최소화하라 (0) | 2020.10.16 |
(이펙티브 자바 3) 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 (0) | 2020.10.10 |
(이펙티브 자바 3) 14. Comparable을 구현할지 고려하라 (0) | 2020.10.04 |
(이펙티브 자바 3) 13. clone 재정의는 주의해서 진행하라 (0) | 2020.10.02 |
(이펙티브 자바 3) 12. toString을 항상 재정의하라 (0) | 2020.07.25 |
(이펙티브 자바 3) 11. equals를 재정의하려거든 hashCode도 재정의하라 (0) | 2020.07.25 |
Comments