Table of contents
객체는 원시 타입과 달리 여러 가지 값(key : value)
을 가지고 있고 크기가 일정하지 않습니다.
그 뜻은 원시 타입의 값 처럼 메모리(stack
) 셀 하나에 다 들어갈 수 없고 Heap
이라는 공간에 할당이 됩니다.
Heap 은 사이즈가 동적으로 변하는 요소들이 보관되는 장소입니다.
객체를 선언 및 할당하면
Heap
어딘가 메모리에 저장되어 있고 메모리 셀 하나 안에 커다란 객체가 다 들어갈 수 없기 때문에
셀 여러 개 걸쳐서 객체가 할당 됩니다.
let color = {
name: "blue",
size: "big",
};
color 라는 변수명은 메모리 셀을 가리키는데 객체를 가리키는 주소를 가지고 있습니다.
원시 타입 vs 객체 타입
원시 타입은
변수가 메모리 자체를 가리키고 있습니다. → 값 자체가 메모리 셀에 들어가있습니다.
- 원시 타입은 값 자체가 복사되어 할당 됩니다.
let a = 1;
let b = a; // a의 값인 1 이 할당 : a = 1, b = 1
b = 2; // a = 1, b = 2
객체 타입은
값이 아닌 메모리 주소를 보관하고 있습니다. → 메모리 주소 값을 참조 하고 있습니다.
- 객체 타입은 참조 값(메모리 주소) 가 복사되어 전달 됩니다.
let apple = {
name: "apple",
}; // 0x2424
let banana = apple; // banana 변수에 apple 이 가리키는 메모리의 주소를 할당 합니다.(0x2424)
apple.name = "melon";
// apple 이 가리키고 있는 name 을 melon 으로 바꿨으니
// banana.name 역시 melon 으로 바뀝니다.
// ✅ 같은 메모리 주소를 가리키고 있으니까!!