원시 타입의 데이터(primitive data types; 원시 자료형)는 객체가 아니면서 method를 가지지 않는 6 가지의 타입
string, number, bigint, boolean, undefined, symbol, (null) ---> 이 6가지는 항상 하나의 값을 가진다.
원시 자료형은 모두 "하나"의 정보, 즉, 데이터를 담고 있습니다. 옛날에 어떻게 코드를 작성했는지를 돌아보면, 왜 이런 단순한 데이터가 "원시적인" 데이터라고 이야기하는지 조금은 더 쉽게 이해하실 수 있습니다.
그때는 데이터 저장소(메모리)의 용량이 제한되어 변수 하나에 데이터 용량이 제한된 하나의 원시 자료형 밖에 담을 수밖에 없었기 때문입니다.
원시 자료형의 보관함인 변수에는 하나의 원시 자료형만 담을 수 있습니다.
변수에는 데이터의 크기와는 관계없이 하나의 데이터만 담을 수 있습니다.
JavaScript에서 원시 자료형이 아닌 모든 것은 참조 자료형입니다. 배열([])과 객체({}), 함수(function(){})가 대표적입니다. 이런 자료형을 JavaScript에서는 참조 자료형(reference data type; 참조 타입)이라고도 부릅니다.
참조 자료형을 변수에 할당할 때는 변수에 값이 아닌 주소를 저장합니다. ---> ex) let a = [1, 2, 3] 시 a의 값은 주소에 저장됨.
이렇게 하나의 스트링을 split 하던 형식으로 사용되던 배열이 매우 자주 사용됨으로써 이제 대부분의 컴퓨터 언어에는 JavaScript처럼 배열(혹은 비슷한)이라는 자료 구조가 구현이 되어 있습니다.
요소의 추가, 삭제, 변경 정도만 알면 쉽게 배열을 다룰 수 있게 되었습니다.
왜 따로 자료 구조를 구현해야만 했을까요? 변수에 넣을 수 있는 데이터 크기가 제한되기 때문입니다.
참조 자료형이 저장되는 특별한 데이터 보관함이 있다.
이 특별한 데이터 보관함에서는 자기 마음대로 사이즈를 늘렸다가 줄였다가 합니다. ("동적(dynamic)으로 변한다"라고 하기도 합니다.) 이처럼 데이터는 별도로 관리되고, 우리가 직접 다루는 변수에는 주소가 저장되기 때문에 reference data type이라고 불립니다. 이런 특별한 데이터 보관함을 heap이라고도 부릅니다.
원시 자료형이 할당될 때에는 변수에 값(value) 자체가 담기고, 참조 자료형이 할당될 때는 보관함의 주소(reference)가 담깁니다.
참조 자료형은 기존에 고정된 크기의 보관함이 아니라, 동적으로 크기가 변하는 특별한 보관함을 사용할 수 있습니다.