_:n9ea280b8d1b84a3c924bc37a14d24ac0xb0
<http://schema.org/description>
"불변성이란 한번 생성된 객체가 생명 주기 동안 어떤 상황에서도 상태 (인스턴스 변수의 값) 가 변하지 않음을 뜻한다. setter를 뚫어 놓는다면 당연히 그 객체는 불변하지 않다. getter 역시도 값을 JVM Stack에 저장하지 않고 heap의 메모리 주소의 참조값을 제공하는 자료형을 리턴하는 (예: Collection) 경우 값을 hard copy 받는 게 아닌 heap에 있는 같은 값을 가리키고 있는 shallow copy가 되므로, 해당 자료를 반환받은 메소드에서 자료에 변경을 가하게 되면 (예를 들어 Collection에 원소를 추가/제거하게 되면) setter로 자료를 제공했던 객체에도 원치 않게 반영되게 된다. 자바는 자료의 불변성을 보장하는 수식어를 따로 제공하지 않는다.final이 그런 역할을 한다고 오해하는 경우도 있지만, **final은 재할당을 금지하는 것이지 값의 불변을 보장하는 것이 아니다. **예를 들어 Collection의 경우 final이 걸려도 새로운 Collection을 할당하는 것이 불가능할 뿐 기존 Collection에 원소를 추가하거나 삭제하는 것이 가능하다. 이런 자바에서 자료의 불변성을 유지하기 위해 취할 수 있는 방법은 크게 두 가지가 있다. 값을 변경할 수 있는 메소드를 없애기"
<https://blog.h2f.kr/posts/200313-eb-b6-88-eb-b3-80-ec-84-b1-immutability/>