아이템 30
요소의 가시성을 최소화하라
API를 설계할 때 간결한 API를 선호하는 데는 여러 가지 이유가 있다.
- 작은 인터페이스는 배우고 쉽고 유지하기 쉽다.
- 변경을 가할 때는 기존의 것을 숨기는 것보다 새로운 것을 노출하는 것이 쉽다.
외부에 노출된 것을 변경하면 이 코드를 사용하는 모든 부분이 영향을 받는다.
- 클래스의 상태를 나타내는 프로퍼티를 외부에서 변경할 수 있다면, 클래스는 자신의 상태를 보장할 수 없다.
private set으로 접근자의 가시성을 제한하는 것이 좋다.
가시성 한정자 사용하기
접근제어자
- public : 모든 곳에서 사용 가능
- private : 클래스 내에서만 사용 가능
- protected : 해당 클래스와 하위 클래스에서만 사용 가능
- internal : 모듈 내부에서만 사용 가능
톱레벨 요소
- public : 모든 곳에서 사용 가능
- private : 같은 파일 내부에서만 사용 가능
- internal : 모듈 내부에서만 사용 가능
참고로 모듈은 함께 컴파일되는 코틀린 소스를 의미한다. 만약 모듈이 다른 모듈에 의해서 사용될 가능성이 있다면 internal을 사용해서 공개하고 싶지 않은 요소를 숨긴다.
DTO의 경우 고냥 프로퍼티를 사용할 수 있게 눈에 띄도록 만들자. 필요하지 않으면 그냥 프로퍼티를 제거하자