기준은 기존 데이터가 보존(immutable)되는냐 변경(mutable)되느냐의 차이다.
immutable변수는 기 할당한 값을 변경했을때 기존 값이 변경되지 않는다. 왜 새로운 메모리 주소로 value를 저장하기 때문이다. 기존 메모리 주소는 GC의 대상이된다.
ex) String, Widget
mutable변수는 기 할당할 값을 변경하면 기존 값이 변경되는데, 그 이유는 기존 메모리 주소를 그대로 유지 하기 때문이다.
ex) List, 객체
그래서 객체의 잘못된 변경을 막기 위해서 Redirecting Constructors를 이용하여 Deep copy를 해야 한다.
참조 : https://blog.daonelab.com/post/45/1905/