원시 자료형(primitive data types)과 참조 자료형(referece data types)

정성준 (Seongjun Chung)·2021년 5월 28일
0

JS Dev

목록 보기
5/7
post-thumbnail

1. 원시 자료형(primitive data types)

자바스크립트에서 원시 타입의 데이터 즉, 원시자료형(primitive data types)는 객체가 아니면서 메소드를 가지지 않는 6가지의 타입을 얘기한다.

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

원시자료형은 모두 하나의 정보(데이터)를 담고 있다.


위 그림처럼 원시자료형의 보관함인 변수에는 무조건 하나씩의 데이터들만 담을 수 있다. 그리고 그 안에 있는 값들을 활용할 때는 이름표 역할을 하는 변수명은 건드리지 않은 채 안에 있는 데이터만 교체하면 나중에 필요할 때도 바로바로 찾아 쓸 수 있다. 이 원시 자료형들은 스택(Stack)이라는 공간에 올라간다.

2. 참조 자료형(referece data types)

자바스크립트에선 원시 자료형이 아닌 모든 것은 참조 자료형이다.
대표적으로 배열([ ]), 객체({ }), 함수(function())이 있다.


여기서 알고가자! 왜 원시 자료형과 참조 자료형이 나눠서 사용되었어야 했을까?

예전 컴퓨터가 탄생되고 초창기에는 배열이라는 개념이 사용되기 어려워서 변수에 문자열을 담아 split을 하는 형식으로 배열 비스무리하게 사용했다. ex) .csv 같은 쉼표로 구분된 데이터에서도 그 흔적을 볼 수 있다.

00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, ...

자바스크립트에서도 이를 string 변수로 선언해준다면 분명 쉽게 데이터를 추가할 수 있다는 것을 알고 있다.

let arr = '00, 01, 02';
arr += ', 03';		// '00, 01, 02, 03'

하지만 변수에는 넣을 수 있는 데이터의 크기가 제한되어 있을 뿐만 아니라, 나중에 원하는 데이터를 수정 및 활용하는데 매우 귀찮을 것이다.
이런 이유로 데이터의 크기가 동적으로 변하는 특별한 데이터 보관함이 필요했던 것이다.


여기서 바로 그 메모리의 보관함이 힙(Heap)이라는 공간이다. 참조 자료형은 기존 원시 자료형이 스택(Stack)에 변수명과 함께 그 데이터를 자신이 직접 갖고 있는 것과는 다르게 변수에 주소를 갖고 있는다. 그리고 힙(Heap)에서는 데이터를 담고 있는 크기를 마음대로 늘렸다 줄였다할 수 있어서 배열과 객체 등등의 자료를 다루기에 아주 용이하다. 이로써 스택 공간에서는 변수 내에 힙 공간의 주소만 갖고 있으면 된다.

다만 참조 자료형은 데이터를 말그대로 참조하는 것이기 때문에 다른 변수에 담아서 데이터를 활용하더라도 그 주소에 참조된 원본이 수정되기 때문에 데이터의 불변(immutable)에 있어서 조심해야 한다.

이미지 출처: 코드스테이츠 교육 자료
질 좋은 교육 감사합니다. 꾸벅 (_ _)

profile
ZEP에서 프론트엔드 개발을 하고 있습니다.

0개의 댓글