[JavaScript]원시타입과 참조타입

wnsxk2·2024년 12월 5일

💡 개요

며칠 전 JavaScript얕은 복사와 깊은 복사에 대해 정리한 글을 작성했다.
정리를 하다 보니 이러한 복사가 발생하는 기준이 무엇인지 궁금해졌고, 이는 데이터 타입과 깊은 관련이 있다는 사실을 알게 되었다.
이번 글에서는 JavaScript원시 타입참조 타입에 대해 명확히 정리해보겠다!

JavaScript의 데이터 타입

JavaScript의 데이터 타입은 크게 원시 타입(Primitive Type)참조 타입(Reference Type) 두 가지로 구분된다.
각 타입의 특징을 자세히 살펴보자!

원시 타입 (Primitive Type)

원시 타입의 종류는 다음과 같다:

  • Null
  • Undefined
  • Boolean
  • Number
  • BigInt
  • String
  • Symbol

이들은 모두 불변(immutable)하고, 값 자체가 변수에 저장된다.
즉, 원시 타입의 변수는 stack 메모리에 값 자체를 저장한다.
만약 다른 변수에 원시 값을 복사하면 값이 복사되므로 두 변수는 서로 독립적으로 작동한다.

참조 타입 (Reference Type)

참조 타입의 종류에는 다음과 같은 것이 포함된다:

  • Object
  • Array
  • Function
    그리고 원시 타입에 속하지 않는 모든 데이터 타입이 참조 타입에 해당한다.

참조 타입은 변수에 값이 아니라, heap 메모리에 저장된 값의 주소를 저장한다.
즉, stack에는 주소 값만 저장되고 실제 데이터는 heap에 저장된다.
따라서 참조 타입을 다른 변수에 복사하면 주소 값이 복사되므로 두 변수가 동일한 객체를 참조하게 된다.

🪄 결론

얕은 복사와 깊은 복사가 관찰되는 대상은 참조 타입 변수다.

  • 얕은 복사stack 메모리에 저장된 주소 값만 복사한다.
  • 깊은 복사heap 메모리의 실제 데이터를 새롭게 복사한다.

이 차이 때문에 얕은 복사를 수행한 경우, 원본과 복사본이 같은 데이터를 참조하게 되고, 원본 데이터를 변경하면 복사본에도 영향을 미치게 된다.
반면, 깊은 복사를 하면 원본과 복사본이 완전히 독립적인 데이터를 가지게 된다.


📌 참고 자료

0개의 댓글