며칠 전 JavaScript의 얕은 복사와 깊은 복사에 대해 정리한 글을 작성했다.
정리를 하다 보니 이러한 복사가 발생하는 기준이 무엇인지 궁금해졌고, 이는 데이터 타입과 깊은 관련이 있다는 사실을 알게 되었다.
이번 글에서는 JavaScript의 원시 타입과 참조 타입에 대해 명확히 정리해보겠다!
JavaScript의 데이터 타입은 크게 원시 타입(Primitive Type)과 참조 타입(Reference Type) 두 가지로 구분된다.
각 타입의 특징을 자세히 살펴보자!
원시 타입의 종류는 다음과 같다:
NullUndefinedBooleanNumberBigIntStringSymbol이들은 모두 불변(immutable)하고, 값 자체가 변수에 저장된다.
즉, 원시 타입의 변수는 stack 메모리에 값 자체를 저장한다.
만약 다른 변수에 원시 값을 복사하면 값이 복사되므로 두 변수는 서로 독립적으로 작동한다.

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

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