불변 객체는 언제나 스레드에 안전하다
객체 불변성
- 생성되고 난 이후에는 객체의 상태를 변경 할 수 없다.
- 내부의 모든 변수는 final로 설정 되여야한다.
- 참조의 경우 final로 설정한다고 해서 객체가 불변인 것은 아니다.
- final 로 선언 된 객체가 변경 가능한 객체라면, 해당 변수를 사용하는 부분은 모두 동기화 되어야한다.
- 적절한 방법으로 생성되어야 한다. (ex. this 변수에 대한 참조가 외부로 유출되지 않아야 함)
객체 불변과 참조
'객체'가 불변이라는 것과 '참조'가 불변이라는 것은 반드시 구분해야한다.