Skip to content

Latest commit

 

History

History
45 lines (31 loc) · 1.67 KB

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

File metadata and controls

45 lines (31 loc) · 1.67 KB

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

  • 이유: 잘 설계된 컴포넌트란 내부 데이터와 구현을 외부로부터 잘 숨긴(캡슐화) 컴포넌트이다. 접근 권한을 최소화함으로써 외부로부터 내부를 더 잘 숨길 수 있다.

정보 은닉(캡슐화)의 장점은 아래와 같다

  • 병렬 개발을 할 수 있다 → 개발 속도 up
  • 성능 최적화에 도움을 준다 → 캡슐화 자체가 성능에 도움을 주지는 않지만 개별 컴포넌트를 더욱 쉽게 수정할 수 있기 때문에 최적화에도 능하다
  • 재사용성을 높인다

몇가지 유용한 지침

  • 패키지 외부에서 쓸 이유가 없다면 package-private(default)를 사용하자

  • public 클래스의 멤버는 상수(public static final)가 아닌 이상 private으로 선언한다

  • 한 클래스에서만 사용하는 package-private 톱레벨 클래스라면 이를 사용하는 클래스 안에 private static으로 중첩시켜 사용하자

  • 접근 제한자를 넓히기는 쉽지만 좁히기는 굉장히 어렵다는 것을 명심하자

보안 허점에 주의

참조 타입의 경우 final로 선언해도 불변을 보장할 수 없다.

public static final Thing[] VALUES = {...};

이 경우 두 가지 해결책이 있다.

  1. public 불변 리스트를 추가하는 방법
private static final Thing[] PRIVATE_VALUES = {...};
public static final Thing[] VALUES = 
					Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES);
  1. 방어적복사
private static final Thing[] PRIVATE_VALUES = {...};
public static final Thing[] values() {
	return PRIVATE_VALUES.clone();
}