primitive data types; 원시 자료형
객체가 아니면서 method를 가지지 않는 7 가지의 타입 _string, number, bigint, boolean, undefined, symbol, (null), undefined
reference data type; 참조 자료형
JavaScript에서 원시 자료형이 아닌 모든 것은 참조 자료형
배열([])과 객체({}), 함수(function(){})가 대표적
1.원시 자료형(primitive data type)과 참조 자료형(reference data type)의 구분이 왜 필요한지
원시 자료형은 문자열이든 숫자든 한 가지만 표현할 수 있기 때문
과거에는 데이터 저장소(메모리)의 용량이 제한되어 변수 하나에 데이터 용량이 제한된 하나의 원시 자료형 밖에 담을 수밖에 없었음
반면 객체는 데이터 컬렉션이나 복잡한 개체를 표현할 수 있음
왜 따로 자료 구조를 구현해야만 했을까? 변수에 넣을 수 있는 데이터 크기가 제한되기 때문
이런 이유로 "데이터의 크기가 동적으로 변하는" 특별한 데이터 보관함이 필요
2.원시 자료형과 참조 자료형의 차이를 이해하고, 각자 맞는 상황에서 사용
원시 자료형의 보관함인 변수에는 하나의 원시 자료형만 담을 수 있음
참조 자료형을 변수에 할당할 때는 변수에 값이 아닌 주소를 저장하기에 어떻게 코드를 작성하느냐에 따라 보관되는 데이터의 양이 천 개, 만 개가 될 수 있음
3.원시 자료형이 할당될 때는 변수에 값(value) 자체가 담기고, 참조 자료형이 할당될 때는 보관함의 주소(reference)가 담긴다는 개념
변수에는 특별한 데이터 보관함을 찾아갈 수 있는 주소가 담겨있고, 이 주소를 따라가 보면 특별한 데이터 보관함을 찾을 수 있는데, 이 특별한 데이터 보관함에서는 자기 마음대로 사이즈를 늘렸다가 줄였다가 합니다. ("동적(dynamic)으로 변한다"라고 하기도 합니다.) 이처럼 데이터는 별도로 관리되고, 우리가 직접 다루는 변수에는 주소가 저장되기 때문에 reference data type이라고 불립니다.
이런 특별한 데이터 보관함을 'heap'이라 함