새 값을 만드는 변경
좌표 (2, 3)을 불변객체로 표현한다면 이동 연산은 기존 좌표의 내부 숫자를 바꾸는 대신 새 좌표를 만들 수 있다. 기존 좌표를 가진 다른 코드는 이전 값을 계속 볼 수 있다. 변수에 새 객체를 대입하는 것과 기존 객체의 상태를 바꾸는 것은 다른 동작이다.
겉만 고정된 경우
객체의 필드를 다시 대입할 수 없더라도 그 필드가 가리키는 목록은 수정 가능할 수 있다. 외부 코드가 그 목록을 바꾸면 전체 객체의 관측 가능한 상태도 달라진다. 얕은 수준의 변경 제한과 연결된 내용 전체의 불변성을 구분해야 한다.
공유할 때의 장점
여러 곳에서 같은 값을 읽어도 누군가 그 값을 바꿀 가능성이 없다면 변경에 대한 조율이 단순해질 수 있다. 이전 상태를 유지하거나 비교하는 작업에도 도움이 된다. 그러나 공유 참조를 교체하는 일과 다른 가변 자원을 다루는 문제까지 자동으로 해결되는 것은 아니다.
비용과 구현
변경할 때마다 큰 자료 전체를 복사하면 비용이 커질 수 있다. 일부 자료 구조는 바뀌지 않은 부분을 공유해 새 값을 구성한다. 불변성은 프로그램의 의미에 관한 성질이며 항상 같은 메모리 사용량이나 더 빠른 실행을 보장하는 성질은 아니다.
관련 문서
함수형 프로그래밍 / 자료 구조 / 기억 장치 / 객체 지향 프로그래밍