원시 자료형과 참조 자료형의 특징
- 원시 자료형이 할당될 때에는 변수에 값(value) 자체가 담기고, 참조 자료형이 할당될 때는 보관함의 주소(reference)가 담긴다.
- 그래서 참조 자료형은 기존에 고정된 크기의 보관함이 아니라, 동적으로 크기가 변하는 특별한 보관함을 사용할 수 있으며 그 보관함은 heap이라고도 부른다.
Javascript에서 객체가 아니면서 method를 가지지 않는 6가지 타입을 말한다.
string
, number
, bigint
, boolean
, undefined
, symbol
, (null)
이 중에서 자주 사용하는 4(+1)가지 원시 자료형은 아래와 같다.
string
,number
,boolean
,undefined
,(null)
'string', 42, true, false, undefined // 데이터가 "하나"의 정보를 담고있다.
과거의 제한된 메모리 용량으로 인해 각각 변수 하나에 하나의 정보만 넣을 수 있었으며,
배열이 구현 가능했더라도 지금과 비교해 그 사이즈가 제한되어있었다.
const num1 = 123;
const num2 = 123456789;
변수에는 데이터의 크기와 관계없이 단 하나의 데이터만 담을 수 있으며,
원시 자료형은 값 자체에 대한 변경이 불가능하지만, 변수에 다른 데이터를 할당할 수는 있다. ex)let
변수 선언없이 값만 넣었을 경우
"hello world!" "hello codestates!" // "hello world!" 와 "hello codestates!"는 모두 변경할 수 없는 고정된 값입니다.
let으로 변수 선언했을 경우
let word = "hello world!" word = "hello codestates!" // 하지만, word라는 변수에 재할당을 하여 변수에 담긴 내용을 변경하는 것은 가능합니다.
const로 변수 선언했을 경우
const num1 = 123; num1 = 123456789; // 에러 발생 // const 키워드로 선언하면, 재할당은 불가합니다.
원시 자료형이 아닌 모든 것들이 참조 자료형에 해당한다. a.k.a 참조타입
let a = [1, 2, 3, 4, 5]; // Array : 배열
let b = {o: 6, p: 7, q: 9, r: 10}; // Object : 객체
function (){...}; // Function : 함수
참조 자료형에는 하나의 데이터가 아닌 여러 데이터가 담기게 된다.
그래서 참조 자료형은 원시 자료형이 보관되는 데이터 보관함이 아닌 특별한 데이터 보관함
에 저장된다.
이 특별한 데이터 보관함을 heap
이라고도 부르는데 이 곳을 찾아갈 수 있는 주소가 변수
에 저장되며,
heap
은 데이터의 크기에 따라 사이즈를 늘렸다 줄였다 할 수 있다. (동적으로 변한다.)
실질적인 데이터는 특별한 보관함에 저장되고, 변수에 저장되는 값은 그 보관함이 위치한 주소이기 때문에, 이를 참조한다(reference data type)하여 참조 자료형이라 부른다.
동적으로 크기가 변하는 이유는 대량의 데이터를 쉽게 다루기 위해서, 추가 또는 삭제
하는 데이터에 따라 데이터 저장 공간의 크기가 달라지는 것이 고정된 데이터 공간을 사용하는 것보다 효율적
이기 때문이다.