Effective JAVA 책 완독하기 - 클래스는 왠만하면 불변으로! + 클래스 내부 접근 최소화 시키기

박경현·2023년 5월 9일
0

챕터 12 - 클래스와 멤버에 대한 접근은 최소화 하라!

훌륭하게 설계된 모듈은 내부 데이터와 상세한 구현을 외부에 드러내지 않는다
외부에서 제공하는 API 또한 내부 구현과 명확하게 분리해야한다!

정보은폐와 캡슐화를 신경쓰자!

정보은폐는 모듈 사이에서 의존성을 줄여 각 모듈을 따로 개발하고 테스트하고 최적화 합니다

클래스, 인터페이스, 멤버의 접근성을 결정하는 접근제어 메커니즘을 자바는 가지고 있다

엔티티들이 어디에 선언되었고, 접근수정자(public, protected 등) 이 어떤게 붙어 있냐에 따라 다름!

package-private 클래스

멤버나 메서드 뿐만 아니라 클래스 또한 어디까지 공개할지 결정해야 하는데, pulbic 클래스는 패키지의 api임을 기억하라. 그럴 이유가 없는 클래스는 package-private 클래스로 만들어서 관리해야 한다.

챕터 12의 결론!

일단 처음에는 모든 멤버는 private로 만들기!
그리고 같은 패키지에서 접근해야하는 멤버가 있는 경우 package-private로 변경!
단 Serialize를 구현한 클래스의 경우 공개 API에 의도치않게 공개 될 수도 있음

public클래스의 인스턴스 필드는 되도록 public 아니게 만들기!!
불변이 보장되는 public static final 필드는 제외!

근데 public static final 배열필드는 안에 내용이 바뀔 수도 있다!!
public static final Thing[] VALUES = {..} ;

챕터13 -불변 클래스를 사용해라!

불변 클래스란 그 인스턴스 내용을 절대로 바꿀수없는 클래스다!
String, Integer등이 불변 클래스!
설계가 쉽고 안전하다

규칙
1. 객체를 변경하는 메소드를 제공하지 않는다!
2. 재정의 할 수 있는 메소드 제공하지 않는다!
3. 모든 필드를 final로 막는다!
4. 모든 필드를 private로 만든다
5. 가변 객체를 참조하는 필드는 베타적으로 접근 (즉 객체에 대한 참조를 얻지 못하게!)

차고로 불변객체는 원래부터 다중 스레드 환경에서 안전하기 때문에 동기화 안해도 됨!
(여러 스레드가 동시 접근해도 무관 자주 쓰는 값은 public static final 로!!! )

불변 클래스의 유일한 단점은 각각의 값에 대해 서로 다른 객체가 필요!

String이 대표적인 예시!! -> 무조건 한개 더 새롭게 만들어야함!

Getter가 있다고 무조건 Setter 구현은 하지말자!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글