자바스크립트의 모든 값은 데이터 타입을 갖는다. ES6은 7개의 데이터 타입을 제공한다. 7개의 데이터 타입은 원시 타입(Primitive type)과 객체 타입(Reference type) 두가지 자료형으로 분류할 수 있다. Object를 제외한 모든것들은 Primitive한 성격을 갖고 있다.
원시 타입은 하나의 데이터(정보)를 담고 있는 타입을 말한다.
원시 자료형은 객체가 아니면서 메서드를 가지지 않는 6가지 타입이다. 모두 변수 선언, 초기화, 할당 시 값이 저장된 메모리 영역에 직접적으로 접근한다. 즉 변수에 새 값이 할당될 경우, 변수에 할당된 메모리를 블럭에 저장된 값을 바로 변경한다.
const num = 123
const arr = [1,2,3,4,5];
let bye = "hello"
// 데이터의 크기와 관계 없이 하나의 변수에는 하나의 데이터만 담을 수 있다.
// 원시 자료형은 값 자체에 대한 변경이 불가능(immutable)하지만, 변수에 다른 데이터를 할당할 수는 있다.
참조 자료형은 Object로 구분되는 모든 자료형에 해당한다. 대표적으로 배열, 객체, 함수 등을 말하고
이들은 특별한 저장공간을 따로 사용하여 데이터를 저장한다. 본래의 데이터는 이름이 정해진 사물함에 담기게 되는데 참조형 타입은 하나의 사물함에 데이터가 보관된 주소를 붙여서 데이터를 추가 및 삭제, 조회를 한다. 즉 참조 타입은 변수의 값이 저장된 메모리 블럭의 주소를 가지고 있고 자바스크립트 엔진이 변수가 가지고 있는 메모리 주소를 이용해서 변수의 값에 접근한다.
다시 정리하자면 객체 타입은 변수에 주소를 할당하여 그 주소를 이용해 데이터를 조회 및 수정을 한다.
객체 타입의 특징은 원시 타입과 달리 메모리가 고정되어 있지 않다는 점이다.
수정을 할때 마다 메모리 크기가 달라지는 동적인 특징을 가지고 있다.
원시 타입은 변수에 값이 할당될 때, 값 자체가 할당되며 객체 타입은 변수에 값이 할당될 때, 보관함의 주소(reference)가 할당된다. 변수엔 원시 값 혹은 주소만 지정할 수 있고, 주소는 크기가 변하는 특별한 데이터 저장소인 heap을 참조하게 되는 것이다.
참고 및 출처
모던 자바스크립트 Deep Dive
https://velog.io/@surim014/JavaScript-Primitive-Type-vs-Reference-Type