불변 객체란, 외부에서 불변 객체의 값을 수정할 수 없는 객체

immutable 의 java 에서의 키워드 => final 자바에서의 final 은 불변을 만들어주는게 아니고, 재할당을 금지

List, Map 등 객체 내부의 상태가 변경되지 못하게 하는것은 아님

final 키워드의 용도별 쓰임새

  1. 클래스 시그니처 -> 해당 클래스 상속 불가
  2. 메소드 시그니처 -> 해당 메소드 오버라이딩 불가
  3. 변수 -> 해당 변수 재할당 불가

불변 객체 및 final을 사용해야 하는 이유

  1. Thread-safe
  2. 불변 객체가 아닌, 가변 객체를 통해 작업을 진행하면 객체가 불안정한 상태에 빠질 수 있음
  3. 가비지 컬렉션의 성능을 높일 수 있음

Mutable 과 Immutable