클래스를 불변으로 만드는 5가지 방법

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

불변 객체의 이점

  1. 불변 객체는 단순하다.
  2. 불변 객체는 근본적으로 스레드 안전하여 따로 동기화할 필요 없다.
  3. 불변 객체는 안심하고 공유할 수 있다.
  4. 불변 객체는 자유롭게 공유할 수 있음은 물론, 불변 객체끼리는 내부 데이터를 공유할 수 있다.
  5. 불변 객체는 그 자체로 실패 원자성을 제공한다.

불변 객체의 단점

  1. 값이 다르면 반드시 독립된 객체로 만들어야 한다.