변경 가능성을 최소화하라

불변 클래스란? - 인스턴스의 내부 값을 수정할수 없는 클래스

ex) String, BigInteger, BigDecimal

클래스를 불변으로 만들려면?

  1. 객체의 상태를 변경하는 메서드를 제공하지 않는다.
  2. 클래스를 확장 할수 없도록 한다.
  3. 모든 필드를 final로 선언한다.
  4. 모든 필드를 private으로 선언한다.
  5. 자신 외에는 내부의 가변 컴포넌트에 접근할수 없도록 한다.

불변 객체는 단순하다. 불변 객체는 생성된 시점의 상태를 파괴될떄까지 그대로 간진한다. 불변 객체는 근본적으로 스레드 세이프하여 따로 동기화를 할필요가 없다.

-> 즉 여러 스레드가 동시에 사용해도 절대 훼손되지 않는다.

이펙티브자바 3판 참고! (잊지 않기 위해 블로그에 올립니다)