기본 자료형
Chapter 2 - Primitive Types
Mutable and Immutable
자바스크립트에서 변수는 가변형(Mutable)과 불변형(Immutable) 두가지로 나뉜다. 변수를 사용한다는 말은 곧 '메모리를 사용한다'와 같으며 변수로 작동하는 모든 값은 메모리를 통해 활용된다. 이 메모리에 저장된 값을 사용하기 위한 방법으로 이 두가지 방식이 제공되는 것이며 각각 'Call by Reference', 'Call by Value' 라는 이름으로도 알려져 있다.
/** ****************************
* Mutable *
* *************************** */
const mutable = [4,3,2,1];
const variable = mutable;
variable.sort();
console.log(mutable); // [1,2,3,4]
가장 큰 특징으로 가변형 변수에 값이 할당되면 이 변수를 사용하는 모든 곳의 값이 변경된다는 점이다. 가변형은 이런 복잡함 때문에 악명이 높은데 'Pointer' 또는 '참조형' 이라고 불리우는 것도 같은 맥락이다. 이 모든 특징은 변수가 가지고 있는 것이 '값이 아니라 메모리 주소'이기 때문이다.
const mutable ── 메모리 주소 ── 메모리 공간 ── [4,3,2,1]
const variable ── 메모리 주소 ────┘
모식도로 표현한다면 이런 식으로 작동하게 된다. 두 변수는 가변형이므로 메모리 주소만 가지고 있다. 어느 변수를 사용해도 메모리 주소가 가리키는 공간의 값이 변경되는 것이므로 두 변수의 값이 모두 동일하게 바뀐다.
let immutable = "hello, world! :)";
let variable = immutable;
immutable = "CHANGE_VARIABLE"
console.log(variable); // "hello, world! :)"
const immutable ── 메모리 공간 ── "hello, world! :)"
const variable ── 메모리 공간 ── "CHANGE_VARIABLE"
Object를 제외한 나머지는 모두 불변형으로 할당된다. 값이 직접 할당되기 때문에 예제처럼 immutable
, variable
변수는 그 어떠한 연관이 없는 별개의 변수가 된다. 그래서 가변 데이터와는 다르게 코드상 원본값으로 보이는 immutable
변수의 값을 변경한다 하더라도 아무런 영향이 없다.
Primitive Values
Object를 제외한 모든 유형은 다시 Primitive Values
라고도 말하며 null
, undefined
, boolean
, number
, string
이 있다. 이 유형들은 모두 typeof()
함수를 통해 유형을 검사할 수 있는데 예외적으로 null
의 경우 검사할 수 없다. 이는 Object
로 구현된 특수한 객체이기 때문이다.
Reference
Primitive Values
를 제외한 유형 즉 Object
형태는 Reference
라고도 말한다. 굳이 예를 들자면 배열이나 함수를 들 수 있겠지만 자바스크립트에서 기본 자료형을 제외한 모든 객체는 최상위 클래스로 Object를 가지므로 '기본형을 제외한 모든 것'이라고 이해하면 된다. Object.freeze()
함수를 활용하면 명시적으로 불변하게 만들 수도 있다.
초판: 2024. 08. 15. 03:47:40
© 2024 이 문서는 "CC BY 4.0 국제규약" 라이선스로 배포 되었습니다. 모든 권리는 저자에게 있습니다.