변경 가능성을 최소화하라
불변 클래스란? - 인스턴스의 내부 값을 수정할수 없는 클래스
ex) String, BigInteger, BigDecimal
클래스를 불변으로 만들려면?
- 객체의 상태를 변경하는 메서드를 제공하지 않는다.
- 클래스를 확장 할수 없도록 한다.
- 모든 필드를 final로 선언한다.
- 모든 필드를 private으로 선언한다.
- 자신 외에는 내부의 가변 컴포넌트에 접근할수 없도록 한다.
불변 객체는 단순하다. 불변 객체는 생성된 시점의 상태를 파괴될떄까지 그대로 간진한다. 불변 객체는 근본적으로 스레드 세이프하여 따로 동기화를 할필요가 없다.
-> 즉 여러 스레드가 동시에 사용해도 절대 훼손되지 않는다.
이펙티브자바 3판 참고! (잊지 않기 위해 블로그에 올립니다)