본문 바로가기

Web/Frontend 기본 CS 정리

깊은 복사와 얕은 복사에 대해 설명해주세요.

728x90

깊은 복사와 얕은 복사는 객체나 배열을 복사할 때 그 복사의 깊이에 따라 구분되는 개념입니다.

얕은 복사는 객체의 최상위 레벨 프로퍼티들만 복사하는 방법입니다. 즉, 객체 내부에 또 다른 객체나 배열이 있을 경우, 그 내부 객체의 참조값만 복사됩니다. 이로 인해 복사된 객체와 원본 객체는 동일한 내부 객체를 참조하게 되어, 한쪽에서 내부 객체를 수정하면 다른 쪽에도 영향을 미치게 됩니다.

반면에, 깊은 복사는 객체의 모든 계층의 프로퍼티들을 재귀적으로 복사하여 완전히 새로운 객체를 생성하는 방법입니다. 따라서 복사된 객체와 원본 객체는 완전히 독립적인 상태가 되며, 한쪽을 수정해도 다른 쪽에 영향을 주지 않습니다.

예를 들어, JavaScript에서 얕은 복사는 Object.assign()이나 전개 연산자(...)를 사용하여 수행할 수 있습니다. 하지만 이러한 방법들은 중첩된 객체까지 복사하지 않기 때문에, 깊은 복사가 필요한 경우에는 JSON.parse(JSON.stringify(obj))나 외부 라이브러리의 _.cloneDeep() 같은 함수를 사용합니다.