Immutable & Mutable

이주희·2022년 3월 27일
0

CS

목록 보기
19/66

Immutable

불변 객체

  • 불변 객체는 내용을 변경할 수 없는 객체이다.
    (일단 객체가 생성되면 상태를 변경할 수 없는 객체, 메모리를 한번 할당 받으면 값이 변경되지 않는다.)

  • 객체와 배열을 제외한 모든 타입 불변이다.
    (원시 타입: 숫자, 문자열, boolean, null, undefined, simbol)

👇🏻 값을 재할당하면 새로운 메모리 공간을 할당 받아 값을 넣고, 변수가 가리키는 메모리 주소를 변경한다.
(이전 값은 더 이상 사용되지 않으므로 garbage collection 대상이 된다.)

var immutableString = 'Hello';
immutableString = immutableString + 'World';

위와 같이 immutavleString에 string 'World'를 더하면 아래와 같은 이벤트가 발생한다.

  1. 기존의immutableString을 검색한다.
  2. 'World'가 immutableString의 기존 값에 추가된다.
  3. 결과 값이 새 메모리 블록에 할당된다.
  4. immutableString 객체는 새로 만든 메모릭 공간을 가리킨다.
  5. 기존에 생성한 메모리 공간은 Garbage collection이 가능해진다.
    Garbage Collection: 쓸모 없어진 객체가 차지하는 메모리를 자동으로 해제하는 것

    객체가 불변인 경우도 있다.

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

Mutable

가변 변수

  • 변경 가능한 변수의 유형이다.
    (생성 후 상태를 수정할 수 있는 객체)

  • JS에서 원시 타입을 제외한 객체타입(객체, 배열)은 mutable이다.

  • 객체 타입을 변수에 할당하면, 변수에는 실제 객체가 저장된 힙 메모리 주소가 저장된다.

  • 객체 타입을 담은 변수를 다른 변수에 할당하면, 메모리 주소를 공유하기 때문에 같은 객체를 가리킨다.

  • 객체를 복사해서 새로운 변수에 할당하면, 객체의 구성은 같지만 메모리 주소가 다르기 때문에 서로 다른 객체이다.

const person = {
  name: 'juhee'
}

/*객체를 담은 변수를 할당 : 메모리 주소 공유*/
const p1 = person
p1 === person // true

/*객체를 복사해서 할당 : 메모리 주소 다름(얕은 복사)*/
const p2 = {...person} //Spread Operator
p2 === person //false
profile
🍓e-juhee.tistory.com 👈🏻 이사중

0개의 댓글