아이템 30 - 요소의 가시성을 최소화화라

ds_chanin

·

2023. 6. 12. 01:18


WHY?

작은 인터페이스는 배우기 쉽고 유지하기 쉽다.

기능이 많은 클래스보다 기능이 적은 클래스를 이해하는 것이 쉽고 유지보수하기 쉽다.

보이는 요소 자체가 적으면 유지보수하고 테스트할 것이 적다.

 

변경을 가할 때는 기존의 것을 숨기는 것보다 새로운 것을 노출하는 것이 쉽다.

기존 요소는 이미 사용하고 있는 부분에 많은 영향을 미치고 있을 수 있기 때문이다.

가시성과 관련된 제한을 변경하는 것은 더 어렵다.

따라서 변경할 경우 대체제를 제공해야한다.

 

클래스의 상태를 나타내는 프로퍼티를 외부에서 변경할 수 있다면 클래스는 특정 조건을 만족해야하는 자신의 상태를 보장할 수 없다.

클래스의 값(var)의 setter의 가시성만 private하게 제한 하도록 하는 것이 좋다.

가시성이 제한 될수록 클래스의 변경을 쉽게 추적할 수 있으며 프로퍼티의 상태를 이해하기 쉽다.

추가로 병렬프로그래밍을 할 때 안전하다.

 

가시성 한정자를 의도에 맞게 사용하면 좋다.

클래스 멤버의 경우 다음과 같다.

  • public: 전체공개로 디폴트 값이다.
  • private: 클래스 내부만 접근할 수 있다.
  • protected: 클래스와 서브클래스 내부에서만 접근할 수 있다.
  • internal: 모듈 내부에서만 볼 수 있다.

코틀린의 경우 클래스 멤버변수가 지역적으로(클래스 내에서)만 사용된다면 priavte으로 설정할 것을 추천한다.

 

톱레벨 요소의 경우 다음과 같다.

  • public: 전체공개
  • private: 같은 파일 내
  • internal: 모듈 내