위키득계정 ↗
기술

불변객체

불변객체기술
영문명
Immutable object
주요 성질
생성 이후 상태 유지
대조 개념
가변 객체
관련 용도
공유 값과 상태 변화 관리
불변객체는 생성된 뒤에 외부에서 관측하는 상태가 바뀌지 않는 객체다. 값을 공유할 때 예상하지 못한 변경을 줄이는 데 유용하지만, 참조를 바꿀 수 없다는 성질이나 내부 요소까지 모두 불변이라는 성질과는 구분해야 한다.

새 값을 만드는 변경

좌표 (2, 3)을 불변객체로 표현한다면 이동 연산은 기존 좌표의 내부 숫자를 바꾸는 대신 새 좌표를 만들 수 있다. 기존 좌표를 가진 다른 코드는 이전 값을 계속 볼 수 있다. 변수에 새 객체를 대입하는 것과 기존 객체의 상태를 바꾸는 것은 다른 동작이다.

겉만 고정된 경우

객체의 필드를 다시 대입할 수 없더라도 그 필드가 가리키는 목록은 수정 가능할 수 있다. 외부 코드가 그 목록을 바꾸면 전체 객체의 관측 가능한 상태도 달라진다. 얕은 수준의 변경 제한과 연결된 내용 전체의 불변성을 구분해야 한다.

공유할 때의 장점

여러 곳에서 같은 값을 읽어도 누군가 그 값을 바꿀 가능성이 없다면 변경에 대한 조율이 단순해질 수 있다. 이전 상태를 유지하거나 비교하는 작업에도 도움이 된다. 그러나 공유 참조를 교체하는 일과 다른 가변 자원을 다루는 문제까지 자동으로 해결되는 것은 아니다.

비용과 구현

변경할 때마다 큰 자료 전체를 복사하면 비용이 커질 수 있다. 일부 자료 구조는 바뀌지 않은 부분을 공유해 새 값을 구성한다. 불변성은 프로그램의 의미에 관한 성질이며 항상 같은 메모리 사용량이나 더 빠른 실행을 보장하는 성질은 아니다.

관련 문서

함수형 프로그래밍 / 자료 구조 / 기억 장치 / 객체 지향 프로그래밍