logo

기본 자료형

Chapter 2

64 조회

0 추천

504 단어

3분 예상

2024. 08. 15. 게시

luasenvy 작성

CC BY-NC-SA 4.0

Mutable & Immutable

가변 (Mutable)

/** ****************************
 * Mutable                     *
 * *************************** */
const mutable = [4,3,2,1];
const variable = mutable;

variable.sort();

console.log(mutable); // [1,2,3,4]

Object는 가변적이기 때문에 값을 할당할 때 객체의 메모리 주소값이 할당된다. Call by Reference라는 어려운 말을 쓰기도 하는데 그냥 참조값이라고 생각하면 된다. 그래서 가변 데이터를 변경하게 되면 참조하고 있는 다른 곳의 데이터들도 모두 바뀌게 된다. 위 예제처럼 참조값을 변경해도 원본 값이 변경된다. 참조는 주소일 뿐이고 실제로 조작되는 값은 그 주소에 있는 값이기 때문이다.

불변 (Immutable)

/** ****************************
 * Immutable                   *
 * *************************** */
let immutable = "hello, world! :)";
let variable = immutable;

immutable = "CHANGE_VARIABLE"

console.log(variable); // "hello, world! :)"

Object를 제외한 나머지는 모두 불변적으로 할당된다. 값 그 자체가 할당되기 때문에 위 예제의 immutable, variable 변수는 그 어떠한 연관이 없는 별개의 변수이다. 그래서 가변 데이터와는 다르게 코드상 원본값으로 보이는 immutable 변수의 값을 변경한다 하더라도 아무런 영향이 없다.

Primitive Values

Object를 제외한 모든 유형은 불변적으로 정의되고 이를 Primitive Values 라고 일컬으며 null을 제외하고 typeof() 함수를 통해 유형을 검사할 수 있다. null을 검사할 수 없는 이유는 실제로는 null이라는 자료형이 Object로 구현된 객체이기 때문이다.

  • null
  • undefined
  • boolean
  • number
  • string

Reference

참조형은 객체를 다룰 때 사용한다. 굳이 구분하자면 배열, 함수 등이 있겠지만 자바스크립트에서 기본 자료형을 제외한 모든 객체는 최상위 클래스로 Object를 상속받는다. Object.freeze() 함수를 활용하면 명시적으로 객체도 불변하게 만들 수 있다.