JavaScript Review 👀 - 3화

JavaScript Review 👀 - 3화

객체 타입 및 값과 참조

·

2 min read

객체는 원시 타입과 달리 여러 가지 값(key : value)을 가지고 있고 크기가 일정하지 않습니다.

그 뜻은 원시 타입의 값 처럼 메모리(stack) 셀 하나에 다 들어갈 수 없고 Heap 이라는 공간에 할당이 됩니다.

Heap사이즈가 동적으로 변하는 요소들이 보관되는 장소입니다.

객체를 선언 및 할당하면

Heap 어딘가 메모리에 저장되어 있고 메모리 셀 하나 안에 커다란 객체가 다 들어갈 수 없기 때문에
셀 여러 개 걸쳐서 객체가 할당 됩니다.

let color = {
    name: "blue",
    size: "big",
};
  • color 라는 변수명은 메모리 셀을 가리키는데 객체를 가리키는 주소를 가지고 있습니다.

  • Reference

1

원시 타입 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 으로 바뀝니다.
// ✅ 같은 메모리 주소를 가리키고 있으니까!!