질문 22 · 실전 면접 답변
얕은 복사와 깊은 복사는 어떤 참조를 공유하나요?
이렇게 답해 보세요 (핵심 답변)
얕은 복사(Shallow Copy)는 가장 바깥쪽 객체나 배열만 새로 만들고, 그 안에 들어 있는 중첩 객체들은 기존 참조를 그대로 공유하는 방식입니다. 대표적으로 객체·배열의 전개 연산자(...)와 Object.assign()이 얕은 복사를 수행합니다. 반면 깊은 복사(Deep Copy)는 중첩된 객체들까지 모두 새로운 참조로 복제하여 원본과 복사본이 서로 영향을 주지 않게 만드는 방식이며, 현대 환경에서는 내장 structuredClone()을 주로 활용합니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- 얕은 복사만 한 뒤 중첩된 내부 객체의 프로퍼티를 직접 수정하면 원본 객체에서도 똑같이 값이 바뀌어 버그가 생길 수 있습니다.
- JSON.parse(JSON.stringify(obj)) 방식은 함수, undefined, Symbol이 사라지고 Date가 문자열로 바뀌므로 완전한 깊은 복사 대안이 아닙니다.
면접에서 자주 하는 실수
항상 전체 객체를 깊은 복사하는 것보다, 상태가 실제로 바뀌는 경로의 객체만 새로 만드는 불변 갱신(구조적 공유)이 성능상 유리할 때가 많습니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 22번을 바탕으로 질문과 답변을 새로 정리했습니다.