Immutable & Mutable

양세희·2022년 5월 24일
0
post-thumbnail

Immutable

불변 객체는 내용을 변경할 수 없는 객체다.
객체는 다양한 이유로 불변일 수 있다. 아래와 같은 경우가 그런 예시다.

  • 성능 향상하기(향후 객체의 변경에 대한 계획 없음)
  • 메모리 사용을 줄이기(전체 객체를 복제하는 대신 객체를 참조)
  • 스레드 안전성(여러 스레드가 서로 간섭하지 않고 동일한 객체 참조 가능)

Mutable

"Mutable"은 변경 가능(가변)한 변수의 유형이다.
JavaScript에서, 원시값이 아닌 객체와 배열만이 mutable이다.
(변수 이름이 새 값을 가리키도록 "만들 수 있지만", 이전 값은 여전히 메모리에 유지된다. 따라서 Garbage collection이 필요하다)

가변 객체는 객체가 생성된 후 상태를 수정할 수 있는 객체다.
불변 객체는 일단 객체가 생성되면 상태를 변경할 수 없는 객체다.
문자열과 숫자는 불변이다.
예제를 보면서 이해해보자.

var immutableString = "Hello";

// 위의 코드에서는 문자열 값을 가진 새 개체가 생성됩니다.

immutableString = immutableString + "World";

// 우리는 지금 기존 값에 "World" 를 추가하고 있습니다.

문자열 값을 사용해서 "immutableString"을 추가하면 다음 이벤트가 발생한다.

  1. 기존 값 "immutableString"이 검색되었습니다.
  2. "World"가 "immutableString"의 기존 값에 추가됩니다.
  3. 결과 값이 새 메모리 블록에 할당됩니다.
  4. "immutableString" 객체는 새로 만든 메모리 공간을 가리킵니다.
  5. 기존에 생성한 메모리 공간은 Garbage collection이 가능해집니다.

0개의 댓글