한 객체는 생성된 이후에 상태가 변경될 수 있는 객체이고, Immutable한 객체는 생성된 이후에 상태가 변경되지 않는 객체를 말한다. 자바스크립트에서 Object와 Array를 제외한 모든 타입은 Immutable한 타입이다.
var immutableString = 'Hello';
// In the above code, a new object with string value is created.
immutableString = immutableString + 'World';
// We are now appending "World" to the existing value.
immutableString에 string 값을 더하면, 아래와 같은 이벤트들이 발생한다.
immutableString에 존재하던 값을 읽음
'World'가 immutableString에 존재하던 값에 덧붙여짐
결과값이 새로운 메모리 블록에 할당됨
immutableString 객체가 새로운 메모리 공간을 가리킴
이전에 immutableString이 가리키던 메모리 공간은 GC의 대상이 됨
따라서 Immutable한 타입은, 이전의 상태를 전혀 변화하지 않고 새로운 상태로 만들기 때문에 변경되지 않는다고 말하는 것이다.
Immutable 객체는 내용이 변하지 않는 객체를 말한다. 객체는 다양한 이유로 불변적일 수 있는데, 예시로 아래와 같은 경우가 있다.
성능을 향상시키기 위함
객체가 미래에 변할 계획이 없을 때
메모리 사용을 줄이기 위함
전체 객체를 복사하지 않고 객체 참조를 만듦
Thread-safety (쓰레드끼리 자원 공유할 때 안전하다는 뜻 같음)
여러개의 쓰레드가 서로 간섭하지 않고 같은 객체를 참조할 수 있음#Mutable
Mutable은 바뀔 수 있는 변수 타입을 말한다. Javascript에서는 object와 array만 Mutable한 타입이고, 원시 타입은 Immutable하다.
Mutable한 값을 Immutable하게 만들기 위해서 새로운 변수를 만들어 보관할 수 있지만, 이전 값은 여전히 메모리에 남아있기 때문에 GC가 필요하다.
참조
MDN_Immutable
MDN_Mutable