Skip to main content

원시값을 변수에 할당할 때 어떤 현상이 일어나는가?

let num = 42;
const string = "string";

이처럼 원시값이 변수에 할당될 때, 값 자체를 변수에 할당하는게 아니고, 값의 사본이 생성되어 변수에 저장됨

자바스크립트는 42의 사본을 새로운 메모리 공간을 생성하고, 그 메모리 위치에 대한 참조를 변수 num에 할당합니다.

따라서 num은 42의 메모리 위치를 가리키게 됨

그러나 num자체는 값 42가 포함돼있지 않음

그럼 이 참조되는 원본 42는 어디에 있나?

42라는 리터럴 값을 사용하면, 자바스크립트는 이 리터럴 값을 뜻하는 새로운 값을 메모리에 넣는다.

42라는 이 복사값이 만들어지고, 메모리에 저장됩니다.

변수에는 이 복사값의 참조값을 메모리에 저장한다.

최종적으로 우리는 하나의 원시값을 변수에 할당할 때,

2개의 메모리를 사용하게 됩니다.

  • 원시값 그자체를 보관하는 메모리 주소
  • 변수가 저장되는 메모리 위치.
    • 이 위치에는 원시값이 저장된 메모리 위치를 참조하는 값이 포함
    • 메모리에는 변수도 저장되고, 원시값이 저장된 메모리 위치를 참조하는 값 => 2개가 저장

두 번째 말이 헷갈릴 수 있는데 이 뜻은 다시 말하면

  • 변수자체(식별자, 예를들어 let x = 10에서 x를 의미)도 별도 메모리 위치에 저장
  • 해당 변수는 해당 값이 저장된 메모리 위치를 참조하는 값을 가지고 있음
    • 변수에 할당된 원시값이 실제로 저장된 메모리위치를 가리키는 포인터