본문 바로가기
개발/Java

[Java] 클래스와 멤버는 접근 권한 최소화하기

by devhooney 2023. 1. 16.
728x90

1. 개념

- 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 클래스의 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼는지.

- 잘 설계된 컴포넌트는 구현과 API를 깔끔히 분리.

- API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 전혀 개의치 않음.

 

-> 이는 정보 은닉, 캡슐화

 

 

2. 정보 은닉의 장점

  • 시스템 개발 속도를 높임. -> 여러 컴포넌트를 병렬로 개발할 수 있기 때문.
  • 시스템 관리 비용을 낮춤. -> 각 컴포넌트를 더 빨리 파악하여 디버깅 가능하고, 다른 컴포넌트로 교체하는 부담도 적음.
  • 성능 최적화에 도움을 줌.
  • 재사용성을 높여줌.
  • 큰 시스템 제작의 난이도를 낮춰줌. -> 시스템 전체가 완성되지 않은 상태에서도 개별 컴포넌트의 테스트가 가능.

 

3. 정보 은닉 방법

- 접근 제한자

private: 멤버를 선언한 톱레벨 클래스에서만 접근 가능.

package-private: 멤버가 소속된 패키지 안의 모든 클래스에서 접근 가능.

protected: package-private의 접근 범위를 포함하며, 이 멤버를 선언한 클래스의 하위 클래스에서도 접근할 수 있음.

public: 모든 곳에서 접근 가능.

 

- 주의사항

  • public 클래스의 인스턴스 필드는 되도록 public이 아니어야 함.
  • final이 아닌 인스턴스 필드를 public으로 선언하면 그 필드에 담을 수 있는 값을 제한할 수 없음.
  • public 가변 필드를 갖는 클래스는 일반적으로 스레드 안전하지 않음.
  • 클래스에서 public static final 배열 필드를 두거나 이 필드를 반환하는 접근자 메소드를 제공하면 안됨.

 

4. 핵심정리

- 프로그램 요소의 접근성은 가능한 한 최소한으로.

- 꼭 필요한 것만 골라 최소한의 public API로 설계.

- public 클래스는 상수용 public static final 필드 외에는 어떠한 public 필드도 가져서는 안됨.

- public static final 필드가 참조하는 객체가 불변인지 확인.

 

 

 

 

728x90