래퍼 객체(Wrapper Objects)에 대해 글을 작성하던 중 원시 값에 대해 알게 되었습니다. 이를 계기로 관련된 내용을 찾아 공부하였으며, 복습하고 정리하기 위해 이 글을 작성합니다.
Object를 제외한 모든 타입은 언어의 최하위 수준에서 직접 표현되는 불변 값을 정의합니다. 이러한 타입의 값을 '원시 값'이라고 합니다. - Mdn web docs
JavaScript에서는 데이터 타입을 크게 기본형과 참조형, 2종류로 분류할 수 있습니다. 그 중 기본형에 속해있는 string, number, boolean, null, undefined 등의 타입을 원시형 자료형 즉, 원시 값이라고 합니다.
원시 값은 변경이 불가능하다는것을 이해하기 위해서 먼저 변수와 값에 대해 서로 구분하여 생각해야 합니다.
즉, '원시 값은 변경이 불가능하다'라는 말은 원시 값 자체를 변경할 수 없다는 뜻입니다.
그림을 보면 먼저 color 변수가 선언되어 메모리 주소 100에 undefined가 할당된 것을 볼 수 있습니다. 그런 다음 color 변수에 red라는 문자열을 재할당하면 주소 100에 red가 저장되는 것이 아니라 다른 주소 300에 red가 저장되는 것을 볼 수 있습니다. blue로 같은 작업을 반복하면 주소 500에 blue가 저장되고 color 변수는 이를 참조합니다.
즉, 원시 값은 메모리 특정 구역에 존재하고 있으며 값을 직접 변경할 수 없고 따라서 '불변성'이라는 특징을 가집니다.
이번에는 color 변수에 red를 할당하고, copy라는 변수에 color를 복사했습니다.
위에서 원시 값은 변경이 불가능하기 때문에 두 변수가 red가 저장되어 있는 메모리 주소를 가리키고 있을 거 같았지만, 그림을 살펴보면 color의 변수값이 복제되어 copy에 전달되는 것을 볼 수 있습니다.
위의 상황을 값에 의한 전달(call by value)라고 하며, 이를 통해 color와 copy의 변수에 저장된 blue는 서로 다른 메모리 공간에 저장된 '별개의 값'이라는 것을 알 수 있었습니다.
원시 값에 대해 글을 작성하며 예전에 공부했던 내용들을 다시 살펴볼 기회가 생겼습니다. 이를 통해 잊었던 내용과 더불어 원래 알고 있던 지식을 조금 더 이해하게 되었고, 다시금 공부하는데 복습이 중요한 것을 느꼈습니다.