[JavaScript] 얕은 복사와 깊은 복사

eunchae·2025년 3월 6일

JavaScript

목록 보기
3/4

랩실에서 가끔 전공 질문으로 하시는 말씀이 있다.

👩‍🏫 얕은 복사랑 깊은 복사의 차이점이 뭐야?

그러면 난 보통.. 말이 주는 느낌만 알 뿐이라

🙃 얕은 건.. 얕은 복사고 깊은 건 뿌리까지 깊게 복사한단거 아닌가요ㅋㅋ

라고 대답해버린다.. 실제 면접에서 이러면 뒤에 답변은 들을 필요없이 집에 가야할 것이다

마침 JavaScript 세미나 멘토를 맡으며 나온 내용이기도 하며, 중요한 내용이기에 제대로 짚고 넘어가보기로 했다


1️⃣ 기본 개념

가장 먼저 알아야 할 것은 원시타입참조타입이다.

  • 원시타입 : string, number, bigint, boolean, undefined, symbol, null과 같이 변수에 할당했을 때 메모리에 실제 값을 저장하는 것
  • 참조타입 : 배열, 객체, 함수와 같이 메모리의 heap 영역에 저장된 데이터를 가리킨 것

이 차이를 알았다면, 얕은 복사와 깊은 복사의 차이점에 대해 간단히 말할 수 있겠다.

  • 얕은 복사 : 객체의 참조값(주소) 을 복사, 복사본의 값을 변경하면 원본도 변경
  • 깊은 복사 : 객체의 원시값을 복사, 복사본의 값을 변경해도 원본 값이 변경되지 않음

2️⃣ 얕은 복사

원본값 = 복사본의 값 (언제나 같음) 이다. 이는 최상위 레벨의 속성들을 복사한다.

Array.prototype.slice(), Object.assign(), Spread 연산자 등으로 수행할 수 있다


3️⃣ 깊은 복사

원본값 =/=복사본 값 (변경되면 달라짐) 이다. 이는 다른 객체에 영향을 미치지 않는다.

재귀함수를 이용해서 복사할 수 있다


🔑 핵심

가장 중요한 키워드는 "원본값이 변경되는가?" 에 달린 것 같다.

0개의 댓글