백엔드/Node.js

[JS] 원시 타입, 참조 타입에 대한 이해

SparkIT 2025. 1. 29. 17:25

원시 타입(Primitive Type)이란?

✅ 정의

원시 타입 데이터는 값 자체를 저장하는 데이터 타입을 의미합니다. 예를 들어, 'A'라는 변수에 '10'이라는 값을 지정한다면 스택 메모리에 'A'라는 변수는 '10'이라는 값을 가진다라는 정보가 저장되는 것입니다.

 

💾 메모리 저장 위치

스택(Stack)

 

📋 종류

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

 

📝 예제

let a = 10;
let b = a;  // 값이 복사됨

b = 20;
console.log(a); // 10 (a는 영향을 받지 않음)
console.log(b); // 20
// 메모리 구조 예시

Stack:
+------+----+
|  a   | 10 |
|  b   | 10 |  (a의 값이 복사됨)
+------+----+

 

 


참조 타입(Reference Type)이란?

✅ 정의

참조메모리 주소값을 의미합니다. 즉, 참조 타입 데이터는 메모리 주소를 저장하는 데이터 타입을 의미하는 것입니다. 예를 들어, 'A'라는 변수에 '{ value: 10 }'이라는 값을 지정한다면 힙 메모리에 '{ value: 10 }'라는 값이 특정 '메모리 주소 값'으로 지정되어 저장됩니다. 그리고 스택 메모리에 'A'라는 변수는 해당 '메모리 주소 값'을 가진다라는 정보가 저장되는 것입니다.

 

💾 메모리 저장 위치

스택(Stack) + 힙(Heap)

 

📋 종류

object, array, function

 

📝 예제

let obj1 = { value: 10 };
let obj2 = obj1; // 주소가 복사됨

obj2.value = 20;
console.log(obj1.value); // 20 (obj1도 영향을 받음)
console.log(obj2.value); // 20
// 메모리 구조 예시

Stack:
+------+-----------+
| obj1 | 0x001A   | --> Heap: { value: 10 }
| obj2 | 0x001A   | (같은 주소를 가리킴)
+------+-----------+

 

 


비교 예제

원시 타입은 값 자체를 저장하므로 서로 다른 두 원시 타입을 비교할 때 값을 기준으로 비교합니다.

let a = 10;
let b = 10;
console.log(a === b); // true (값이 같음)

 

참조 타입은 메모리 주소값을 저장하므로 서로 다른 두 참조 타입을 비교할 때 메모리 주소값을 기준으로 비교합니다.

let obj1 = { value: 10 };
let obj2 = { value: 10 };
console.log(obj1 === obj2); // false (주소가 다름)

let obj3 = obj1;
console.log(obj1 === obj3); // true (같은 주소를 참조)

 

 

이런 이유로 원시 타입, 참조 타입을 이용할 때는 복사에 대한 이해가 추가적으로 필요합니다.