자바스크립트 원시타입(primitive) vs 객체타입(object)

RN·2024년 4월 23일

자바스크립트

목록 보기
1/11

자바스크립트에는 두 가지의 데이터 타입이 있다.
원시타입(primitive)객체타입(object)이다.

저 6가지의 원시타입을 제외하면 전부 객체타입으로 볼 수 있다.
Array, function 도 객체타입이다.

종류에 대해 간단하게 살펴봤으니 두 타입의 차이점을 알아보자!



1. 단일데이터 vs 복합데이터


원시타입(primitive)은 단일데이터를 담을 수 있고, 객체타입(object)는 복합데이터를 담을 수 있다.

위의 코드에 나와있듯이 원시타입인 str은 캡틴 아메리카라는 단일데이터를 담을 수 있고, 객체타입인 obj는 캡틴아메리카, 아이언맨, 토르로 복합데이터를 담을 수 있다.


이러한 특성때문에 원시타입과 객체타입은 메모리에 저장되는 위치가 다르다.

단일데이터를 담는 원시타입은 크기가 정해져 있는 반면, 객체타입은 얼마나 많은 데이터를 담을지 정해져있지 않아 heap 공간을 사용하여 동적으로 할당된다.

아래는 메모리 구조이다.

출처 : https://zangzangs.tistory.com/107



2. 변경할 수 없는(Immutable) vs 변경할 수 있는(mutable)

위 사진과 같이 나오는 이유는 원시타입이 바로 변경할 수 없는 불변이기 때문이다.

30 이라는 원시타입 데이터는 불변이기 때문에 40으로 바꿀 수가 없다.
그렇기에 40 이라는 원시타입 데이터를 새로운 메모리공간에 할당하고, 그 주소를 num1이 가리키게 된다! 즉 ★재할당★이 된다.


이 30 이라는 데이터는 사용하지 않으면 가비지 컬렉터에 의해 제거된다 ㅠㅠ

객체타입은 위와 같이 변경이 가능하다.

당연히 새로운 객체를 생성하지 않기때문에 재할당을 하지 않는다.



3. 값에 의한 복사(copy by value) vs 참조에 의한 복사(copy by reference)


원시타입은 값에 의한 복사가 발생하고, 객체타입은 참조에 의한 복사가 발생한다.

우선 원시타입과 객체타입이 메모리상에 어떻게 저장되는지 살펴보자.

위 사진과 같이 원시타입과 객체타입은 저장되는 방식이 다르다.

메모리상에 저장되는 방식을 살펴봤으니 이것을 토대로 왜 원시타입과 객체타입은 복사 방식이 다른지 알아보자.

그림판으로 작업해서 매우 조잡하다 ㅠㅠ

어쨌든 보다시피 원시타입은 값 30이 복사되어 값에 의한 복사가 되며, 객체타입은 참조값이 복사가 되어 참조에 의한 복사가 된다.




4.마무리

위의 사진의 답은 과연 무엇일까?

답은 바로 num1 == num2는 TRUE 이며 obj1 == obj2는 FALSE 이다.
답이 궁금하면 빈 곳을 마우스로 드래그하여 확인하자






num1과 num2는 메모리에 30으로 저장되어있기 때문에 30 과 30을 비교해서 TRUE이며,

obj1과 obj2는 메모리에 각각 다른 참조값이 저장되어있기 때문에 FALSE이다.

0개의 댓글