깊은 복사와 얕은 복사의 이해와 활용
F-Lab : 상위 1% 개발자들의 멘토링
AI가 제공하는 얕고 넓은 지식을 위한 짤막한 글입니다!

깊은 복사와 얕은 복사의 개념
깊은 복사와 얕은 복사는 프로그래밍에서 객체를 복사할 때 자주 사용되는 개념입니다. 이 두 가지 방법은 객체의 복사 깊이에 따라 구분됩니다.
얕은 복사는 객체의 1차원 속성만 복사하고, 중첩된 객체는 참조를 공유합니다. 반면, 깊은 복사는 모든 중첩 객체까지 복사하여 완전히 독립적인 객체를 생성합니다.
왜냐하면 얕은 복사는 1차원 속성만 복사하고 중첩 객체는 참조를 공유하기 때문입니다.
이러한 차이로 인해 얕은 복사는 메모리 사용이 적고 빠르지만, 중첩 객체의 변경이 원본 객체에 영향을 미칠 수 있습니다.
깊은 복사는 독립적인 객체를 생성하여 안전하지만, 메모리 사용이 많고 시간이 더 걸릴 수 있습니다.
얕은 복사의 예제와 활용
얕은 복사는 객체의 1차원 속성만 복사합니다. 예를 들어, 다음과 같은 코드가 있습니다:
const original = { a: 1, b: { c: 2 } }; const shallowCopy = { ...original }; shallowCopy.b.c = 3; console.log(original.b.c); // 출력: 3
위 코드에서 shallowCopy는 original의 b 속성을 참조합니다. 따라서 shallowCopy.b.c를 변경하면 original.b.c도 변경됩니다.
왜냐하면 얕은 복사는 중첩 객체의 참조를 공유하기 때문입니다.
얕은 복사는 메모리 사용이 적고 빠르기 때문에, 중첩 객체의 변경이 필요하지 않은 경우에 유용합니다.
그러나 중첩 객체의 변경이 원본 객체에 영향을 미칠 수 있으므로 주의가 필요합니다.
깊은 복사의 예제와 활용
깊은 복사는 모든 중첩 객체까지 복사하여 독립적인 객체를 생성합니다. 다음은 깊은 복사의 예제입니다:
const original = { a: 1, b: { c: 2 } }; const deepCopy = JSON.parse(JSON.stringify(original)); deepCopy.b.c = 3; console.log(original.b.c); // 출력: 2
위 코드에서 deepCopy는 original과 완전히 독립적인 객체입니다. 따라서 deepCopy.b.c를 변경해도 original.b.c는 영향을 받지 않습니다.
왜냐하면 깊은 복사는 모든 중첩 객체까지 복사하여 독립적인 객체를 생성하기 때문입니다.
깊은 복사는 안전하지만, 메모리 사용이 많고 시간이 더 걸릴 수 있습니다.
따라서 중첩 객체의 변경이 원본 객체에 영향을 미치지 않도록 해야 할 때 유용합니다.
깊은 복사와 얕은 복사의 선택 기준
깊은 복사와 얕은 복사를 선택할 때는 성능과 안전성의 균형을 고려해야 합니다.
얕은 복사는 메모리 사용이 적고 빠르지만, 중첩 객체의 변경이 원본 객체에 영향을 미칠 수 있습니다.
깊은 복사는 안전하지만, 메모리 사용이 많고 시간이 더 걸릴 수 있습니다.
왜냐하면 얕은 복사는 중첩 객체의 참조를 공유하고, 깊은 복사는 모든 중첩 객체까지 복사하기 때문입니다.
따라서 중첩 객체의 변경이 필요하지 않은 경우에는 얕은 복사를, 그렇지 않은 경우에는 깊은 복사를 선택하는 것이 좋습니다.
결론
깊은 복사와 얕은 복사는 객체 복사 시 중요한 개념입니다. 이 두 가지 방법은 객체의 복사 깊이에 따라 구분됩니다.
얕은 복사는 메모리 사용이 적고 빠르지만, 중첩 객체의 변경이 원본 객체에 영향을 미칠 수 있습니다.
깊은 복사는 안전하지만, 메모리 사용이 많고 시간이 더 걸릴 수 있습니다.
왜냐하면 얕은 복사는 중첩 객체의 참조를 공유하고, 깊은 복사는 모든 중첩 객체까지 복사하기 때문입니다.
따라서 상황에 맞게 적절한 복사 방법을 선택하는 것이 중요합니다.
이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.