Immutable & Mutable

Kingmo·2022년 3월 26일
0

1. Immutable

Javascript에서의
Immutable은 내용이 변하지 않는 것을 말한다.

Javascript 객체는 다양한 이유로 불변할 수 있는데 그 목적으로 아래와 같은 경우가 있다.

  • 객체 내용을 바꿀 계획이 없어 성능을 향상시키기 위해
  • 전체 객체를 복사하지 않고 객체 참조를 만들어 메모리 사용을 줄이기 위해
  • 여러개의 Thread가 서로 간섭하지 않고 같은 객체를 참조하여 Thread끼리 안전하게 자원을 공유하기 위해

2. Mutable

Mutable은 바뀔 수 있는 변수 타입으로 Javascript에서 원시 값이 아닌 객체와 배열만이 mutable이다.

만약 mutable한 값을 immutable하게 만들기 위해 변수 이름이 새 값을 가르키도록 만들 수 있지만 이전 값은 여전히 메모리에 유지된다.

var aaa = "111"
var aaa = "222"
var aaa = "333"

위 코드에서 var aaa로 변수를 여러번 선언하고 할당할 때
처음에 메모리 공간에 undefined라는 값이 암묵적으로 할당된 후
기존 메모리에 값을 덮어쓰지 않고(재할당 하지 않고)
새로운 메모리 공간에 값을 할당한다.


값의 재할당

재할당이란 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것을 말한다.
값을 재할당할 수 없다면 변수가 아니라 상수라 한다.
var을 이용해 변수에 값을 재할당하면 기존의 값이 있던 메모리 공간을 지우고 할당하는 것이 아닌 새로운 공간을 확보하여 값을 할당하기 때문에
아무도 사용하지 않는 쓰레기 값들이 생겨나는데 이런 쓰레기값들은 가비지 컬렉터에 의해 메모리에서 자동 해제된다.
단, 언제 해제될지는 예측할 수 없다.


가비지 컬렉터(Garbage Collection, GC)

애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능을 말한다.
더 이상 사용되지 않는 메모리란 간단히 말하자면 어떤
식별자도 참조하지 않는 메모리 공간을 의미한다.
자바스크립트는 가비지 컬렉터를 내장하고 있는 매니지드 언어로서 가비지 콜렉터를 통해 메모리 누수를 방지한다.


다시 주제로 돌아와 Mutable과 Immutable에 관해 이야기해보자.
Mutable 객체는 객체가 생성된 후 상태를 수정할 수 있는 객체를 의미한다.
Immutable 객체는 일단 객체가 생성되면 상태를 변경할 수 없다.

문자열과 숫자는 Immutable이다.
예제를 보고 이해해보자.

var immutableString = "Hello"
immutableString = immutableString + "World"

위 코드의 진행과정이다.

  1. 메모리 주소에 immutableString의 값이 암묵적으로 undeifned로 할당된다.
  2. 다른 메모리 공간에 "Hello"라는 문자열을 값을 가진 immutableString가 생성된다.
  3. 기존 값 immutableString이 검색된다.
  4. "World"immutableString의 기존 값에 추가된다.
  5. 결과 값이 새 메모리 블록에 할당된다.
  6. immutableString는 새로 만든 메모리 공간을 가리킨다.
  7. 기존에 생성한 사용하지않는 메모리 공간은 가비지컬렉션(Garbage collection)이 가능해진다.
profile
Developer

0개의 댓글