[JS] 기본 자료형과 참조 자료형의 비교 방식 (ft. 스택, 힙)

안녕하세요. 오늘은 기본 자료형과 참조 자료형의 저장 방식과 비교 방식에 대해 작성해보도록 하겠습니다.

 

 

 

기본 자료형(Primitive Types)

  • number, string, boolean, null, undefined, symbol과 같은 자료형이며, 값이 스택(Stack)에 직접 저장이 됨
  • 값 자체를 비교하므로 같은 값이라면 ===를 사용해도 true를 반환함
let a = 10;
let b = 10;
console.log(a === b); // true

 

 

 

 

참조 자료형(Reference Types)

  • 객체(Object), 배열(Array), 함수(Function) 등이 포함되며 힙(Heap)에 실제 데이터가 저장되고, 스택에는 해당 데이터가 저장된 힙의 주소가 저장
  • 참조 자료형의 === 비교는 주소가 같은지를 확인하는 것이므로 내용이 같더라도 서로 다른 객체나 배열은 false를 반환
// 서로 다른 객체이므로 주소가 다름
let obj1 = { name: "뭉이" };
let obj2 = { name: "뭉이" };
console.log(obj1 === obj2); // false

// 같은 객체를 참조할 경우
let obj3 = obj1;
console.log(obj1 === obj3); // true

// 배열의 비교 방식
let arr1 = [1, 2, 3];
let arr2 = [1, 2, 3];
console.log(arr1 === arr2); // 서로 다른 주소이므로 false

let arr3 = arr1;
console.log(arr1 === arr3); // 같은 주소를 참조하므로 true

 

 

 

정리

  • 기본 자료형은 스택에 값이 저장되어 === 비교 시 값을 비교
  • 참조 자료형은 힙에 데이터가 저장되고, 스택에는 그 주소가 저장되며 === 비교 시 주소를 비교