원시 자료형과 참조 자료형

원시 자료형과 참조 자료형

원시 자료형

자바스크립트에서 number,string,boolean과 같은 고정된 저장 공간을 차지하는 데이터를 모두 원시 타입 데이터(Primitive type)로 구분한다.

원시 자료형은 객체가 아니면서 메소드를 가지지 않는 6가지 타입이다.

string , number , boolean , undefined , symbol , (null)

이 중, 자주 사용되는 4(+1)가지 원시 자료형은

string , number , boolean , undefined , (null) 이다.

원시 자료형은 단 하나의 데이터를 담고 있다.

80년대엔 메모리 용량이 제한되어 변수 하나에 데이터 용량이 제한된 하나의 원시 자료형 밖에 담을 수 밖에 없었다. 그래서 이와 같은 자료형을 원시 자료형이라 부른다.

하나의 정보만 담고있기 때문에, 고정된 저장 공간을 사용하는 것이 합당하다. 원시 자료형 타입의 값 자체는 변경이 불가능하지만, 변수에 다른 데이터를 할당할 수 있다.

참조 자료형

원시 자료형이 아닌 모든 것은 참조 자료형이다.

참조 자료형은 Object로 구분되는 모든 자료형에 해당한다. 대표적으로 배열, 객체, 함수가 있다.

참조 자료형에는 하나의 데이터가 아닌 여러 데이터가 담기게 된다. 그래서 참조 자료형은 원시 자료형이 보관되는 데이터 보관함이 아닌 특별한 데이터 보관함에 저장된다.

변수에 저장되는 값은 이 데이터가 위치한 곳을 가리키는 주소가 저장된다.

이 특별한 데이터 보관함은 데이터의 크기에 따라 사이즈를 늘렸다 줄였다 할 수 있다. (동적으로 변한다.)

실질적인 데이터는 특별한 보관함에 저장되고, 변수에 저장되는 값은 그 보관함함에 데이터가 위치한 주소이기 때문에, 이를 참조한다 하여 참조 자료형이라 부른다.

그리고 특별한 데이터 보관함을 heap이라 부른다.

즉, 원시 자료형이 할당될 때에는 변수에 값(value) 자체가 담기고, 참조 자료형이 할당될 때는 보관함의 주소(reference) 가 담긴다.

값을 찾을 땐 저장소에 저장된 주소를 보고, heap에서 그 주소에 맞는 값을 찾아 반환한다.

그래서 참조 자료형은 기존에 고정된 크기의 보관함이 아니라, 동적으로 크기가 변하는 특별한 보관함을 사용할 수 있다.

동적으로 크기가 변하는 이유는, 대량의 데이터를 쉽게 다루기 위함이다. 추가 또는 삭제하는 데이터에 따라 데이터 저장 공간의 크기가 달라지는 것이 고정된 데이터 공간을 사용하는 것 보다 효율적이기 때문이다.

원시, 참조로 자료형을 구분한 이유

자바스크립트가 원시 자료형, 참조 자료형으로 구분한 이유는 변수에 넣을 수 있는 데이터의 크기, 저장소의 크기가 제한되기 때문이다.

기술이 진보하면서 처리해야할 데이터의 양도 늘었고, 이 늘어난 데이터를 다루기 위해 구현된 것이 배열, 객체, 함수들이며, 이 타입들은 데이터의 양이 유동적으로 변한다.

즉, 저장소엔 데이터가 위치한 곳(메모리상의 주소)만 저장하고, 값을 불러올 땐 저장소에 저장된 주소를 따라가서 heap 이라는 특별한 데이터 저장소에서 찾는 방식으로 데이터를 처리하게 된다.

데이터는 특별한 저장소에 별도로 관리되고, 우리가 다루는 변수엔 주소만 저장된다. 이 변수를 사용할 땐 그 변수의 주소를 참조하여 실제 변수가 있는 장소에 어떤 데이터가 있는지 도착하고 나서야 비로소 읽을 수 있기 때문에, 참조 자료형(Reference type)으로 불리게 되었다.

원시 자료형과 참조 자료형의 차이

원시 자료형은 변수에 값이 할당될 때, 값 자체가 할당됨

참조 자료형은 변수에 값이 할당될 때, 보관함의 주소(reference)가 할당됨

변수엔 원시 값 혹은 주소만 지정할 수 있고, 주소는 크기가 변하는 특별한 데이터 저장소인 heap을 참조하게 되는 것이다.

2021년 10월 27일에 수정됨
YUNSU BAE

YUNSU BAE

주니어 웹 개발자 배윤수 입니다!

예술의 영역을 동경하고 있어요. 🧑‍🎨