미새문지

Deep Copy vs Shallow Copy 본문

공부 키워드/알고리즘 및 데이터 구조

Deep Copy vs Shallow Copy

문미새 2024. 3. 31. 23:08
728x90

Deep Copy vs Shallow Copy

Deep Copy(깊은 복사)Shallow Copy(얕은 복사)는 객체를 복사할 때 사용되는 두 가지 방식이며, 객체 내의 데이터를 어떻게 처리하는지에 따라 구분된다.

 

Deep Copy(깊은 복사)

  • 깊은 복사는 객체의 모든 레벨을 재귀적으로 복사한다. 객체 내부의 다른 객체나 배열 등도 새롭게 복사되어, 복사된 객체는 원본 객체와 완전히 독립적인 복제본이 된다.
  • 이 방식을 사용하면 복사된 객체를 수정해도 원본 객체에는 영향을 주지 않고, 반대의 경우도 마찬가지이다.
  • 깊은 복사는 복사 과정이 상대적으로 느리고, 메모리 사용량이 더 많다는 단점이 있지만, 복사된 객체가 원본 객체와 완전히 독립적이 되므로, 두 객체 간의 상호 작용을 걱정하지 않아도 된다.

예시)

javascript// 원본 객체
const originalObject = {
    a: 1,
    b: {
        c: 2
    }
};

/* 깊은 복사 실행
JSON.parse와 JSON.stringify를 함께 사용하는 방식이 간단하고 흔하지만, 함수, Date객체, Map, Set 등
일부 객체 타입은 올바르게 복사하지 못하는 제한이 있다고 한다. */
const deepCopiedObject = JSON.parse(JSON.stringify(originalObject));

// 복사된 객체의 내부 객체 변경
deepCopiedObject.b.c = 3;

// 결과 출력
console.log("원본 객체:", originalObject);
console.log("깊은 복사된 객체:", deepCopiedObject);

// 출력 결과
// 원본 객체: { a: 1, b: { c: 2 } }
// 깊은 복사된 객체: { a: 1, b: { c: 3 } }

깊은 복사는 복사된 객체의 내부 객체를 변경해도 원본 객체에는 영향이 없는데, 이는 깊은 복사가 모든 레벨의 요소를 새로 복사하기 때문에 복사된 객체와 원복 객체가 완전히 독립적이기 때문이다.

 

Shallow Copy(얕은 복사)

  • 얕은 복사는 객체의 최상위 레벨만 복사한다. 객체 내부에 다른 객체나 배열 등이 포함되어 있다면, 내부 요소의 참조만 복사된다. 즉, 복사된 객체와 원본 객체는 내부 요소에 대한 참조를 공유하게 된다.
  • 이로 인해 복사된 객체나 원본 객체 중 하나를 수정하면 서로 영향을 받을 수 있으며, 내부 객체가 변경될 경우, 그 변경사항이 두 객체 모두에 반영된다.
  • 얕은 복사는 복사 과정이 빠르고 메모리 사용량이 적다는 장점이 있지만, 내부 객체의 독립성을 유지하기 어렵다는 단점이 있다.

예시)

javascript// 원본 객체
const originalObject = {
    a: 1,
    b: {
        c: 2
    }
};

/* 얕은 복사 실행
얕은 복사는 Object.assign() 메소드나 스프레드 연산자(...)을 사용할 수 있다고 한다. */
const shallowCopiedObject = {...originalObject};

// 복사된 객체의 내부 객체 변경
shallowCopiedObject.b.c = 3;

// 결과 출력
console.log("원본 객체:", originalObject);
console.log("얕은 복사된 객체:", shallowCopiedObject);

// 출력 결과
// 원본 객체: { a: 1, b: { c: 3 } }
// 얕은 복사된 객체: { a: 1, b: { c: 3 } }

 

얕은 복사는 복사된 객체의 내부 객체를 변경했을 때 원본 객체도 영향을 받았는데, 이는 얕은 복사가 객체의 최상위 레벨만 복사하고 내부 객체는 참조를 공유하기 때문이다.

 

 


참조 블로그

https://the-ze.tistory.com/entry/Iteration-vs-Recursion-Deep-copy-vs-Shallow-copy

 

Iteration vs Recursion, Deep copy vs Shallow copy

반복문(Iteration)은 프로그램 내에서 특정 코드 블록을 조건이 만족하는 동안 반복적으로 실행하기 위한 프로그래밍 구조다. 반복문은 코드의 재사용을 통해 작업을 간소화하고, 프로그램의 효율

the-ze.tistory.com

 

728x90