Javascript에서의
Immutable은 내용이 변하지 않는 것을 말한다.
Javascript 객체는 다양한 이유로 불변할 수 있는데 그 목적으로 아래와 같은 경우가 있다.
Mutable은 바뀔 수 있는 변수 타입으로 Javascript에서 원시 값이 아닌 객체와 배열만이 mutable이다.
만약 mutable한 값을 immutable하게 만들기 위해 변수 이름이 새 값을 가르키도록 만들 수 있지만 이전 값은 여전히 메모리에 유지된다.
var aaa = "111"
var aaa = "222"
var aaa = "333"
위 코드에서 var aaa
로 변수를 여러번 선언하고 할당할 때
처음에 메모리 공간에 undefined라는 값이 암묵적으로 할당된 후
기존 메모리에 값을 덮어쓰지 않고(재할당 하지 않고)
새로운 메모리 공간에 값을 할당한다.
재할당이란 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것을 말한다.
값을 재할당할 수 없다면 변수가 아니라 상수라 한다.
var을 이용해 변수에 값을 재할당하면 기존의 값이 있던 메모리 공간을 지우고 할당하는 것이 아닌 새로운 공간을 확보하여 값을 할당하기 때문에
아무도 사용하지 않는 쓰레기 값들이 생겨나는데 이런 쓰레기값들은 가비지 컬렉터에 의해 메모리에서 자동 해제된다.
단, 언제 해제될지는 예측할 수 없다.
애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능을 말한다.
더 이상 사용되지 않는 메모리란 간단히 말하자면 어떤
식별자도 참조하지 않는 메모리 공간을 의미한다.
자바스크립트는 가비지 컬렉터를 내장하고 있는 매니지드 언어로서 가비지 콜렉터를 통해 메모리 누수를 방지한다.
다시 주제로 돌아와 Mutable과 Immutable에 관해 이야기해보자.
Mutable 객체는 객체가 생성된 후 상태를 수정할 수 있는 객체를 의미한다.
Immutable 객체는 일단 객체가 생성되면 상태를 변경할 수 없다.
문자열과 숫자는 Immutable이다.
예제를 보고 이해해보자.
var immutableString = "Hello"
immutableString = immutableString + "World"
위 코드의 진행과정이다.
immutableString
의 값이 암묵적으로 undeifned
로 할당된다."Hello"
라는 문자열을 값을 가진 immutableString
가 생성된다.immutableString
이 검색된다."World"
가 immutableString
의 기존 값에 추가된다.immutableString
는 새로 만든 메모리 공간을 가리킨다.