본문 바로가기
책정리/이펙티브 자바(effectiveJava)

item15:클래스와 멤버의 접근성을 최소화합니다.

by 디찌s 2024. 4. 23.
728x90
반응형

 

잘 디자인된 구성 요소와 잘못 디자인된 구성 요소를 구별하는 가장 중요한 요소는 구성 요소가 내부 데이터 및 기타 구현 세부 정보를 다른 구성 요소로부터 숨기는 정도입니다. 잘 디자인된 구성 요소는 모든 구현 세부 정보를 숨기고 API를 구현과 명확하게 구분합니다. 그런 다음 구성 요소는 API를 통해서만 통신하며 서로의 내부 작업을 인식하지 못합니다. 정보 숨기기 또는 캡슐화로 알려진 이 개념은 소프트웨어 설계의 기본 원칙입니다.

 

캡슐화는 여러 가지 이유로 중요하며, 그 중 대부분은 시스템을 구성하는 구성 요소를 분리하여 독립적으로 개발, 테스트, 최적화, 사용, 이해 및 수정할 수 있다는 사실에서 비롯됩니다. 이렇게 하면 구성 요소를 병렬로 개발할 수 있으므로 시스템 개발 속도가 빨라집니다. 구성 요소를 더 빨리 이해하고 다른 구성 요소에 해를 끼칠 염려 없이 디버깅하거나 교체할 수 있기 때문에 유지 관리 부담이 줄어듭니다.

 

캡슐화는 그 자체로 좋은 성능을 유발하지는 않지만 효과적인 성능 튜닝을 가능하게 합니다. 시스템이 완성되고 프로파일링이 성능 문제를 일으키는 구성 요소를 결정하면 해당 구성 요소는 다른 구성 요소의 정확성에 영향을 주지 않고 최적화될 수 있습니다. 캡슐화는 긴밀하게 결합되지 않은 구성 요소가 다른 컨텍스트에서 유용한 것으로 입증되기 때문에 소프트웨어 재사용을 증가시킵니다.

 

Java에는 정보 숨기기를 지원하는 많은 기능이 있습니다. 액세스 제어 메커니즘 [JLS, 6.6]은 클래스, 인터페이스 및 멤버의 액세스 가능성을 지정합니다. 엔터티의 액세스 가능성은 해당 선언의 위치와 선언에 있는 액세스 한정자(private, protected 및 public)가 있는 경우의 위치에 따라 결정됩니다. 이러한 수정자를 적절하게 사용하는 것은 정보를 숨기는 데 필수적입니다. 법칙은 간단합니다, 각 클래스 또는 멤버를 가능한 한 액세스 할 수 없게하십시오. 즉, 작성 중인 소프트웨어의 적절한 기능과 일치하는 가능한 가장 낮은 액세스 수준을 사용합니다.

 

• private - 멤버가 선언된 최상위 클래스에서만 멤버에 액세스할 수 있습니다.

 • package-private - 멤버가 선언된 패키지의 모든 클래스에서 멤버에 액세스할 수 있습니다. 기술적으로 기본 액세스라고 하며, 액세스 한정자가 지정되지 않은 경우 얻을 수 있는 액세스 수준입니다(기본적으로 공용인 인터페이스 멤버 제외). 

• protected - 멤버가 선언된 클래스의 하위 클래스(몇 가지 제한 사항[JLS, 6.6.2]가 적용됨)와 멤버가 선언된 패키지의 모든 클래스에서 멤버에 액세스할 수 있습니다. 

• public - 어디서든 멤버에 액세스할 수 있습니다.

728x90
반응형

댓글