JAVASCRIPT

Shallow Copy & Deep Copy

seo dori 2023. 9. 7. 13:41

Shallow Copy(얕은 복사)

얕은 복사는 주로 최상위 레벨의 속성만을 복사하고, 그 하위 객체는 참조로 복사하는 방식

이것은 원본 객체와 복사본이 최상위 레벨 속성을 공유하지만 중첩된 객체는 공유하지 않는 방법입니다.

 

const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original }; //또는 Object.assign({}, original);

original.b.c = 3;
console.log(shallowCopy.b.c); // 출력: 3 (변경 반영)

shallowCopy는 original의 최상위 레벨 속성 a와 b를 복사합니다.

a는 원시 값이므로 복사된 객체에서 독립적입니다.

그러나 b는 객체이고, 얕은 복사로 인해 original과 shallowCopy는 동일한 객체를 참조합니다.

 

원본 객체의 b 속성을 변경하면 복사본에도 영향을 미칩니다.

 

 

Deep Copy(깊은 복사)

깊은 복사는 객체의 모든 레벨에서 복사를 수행하는 방법

즉, 원본 객체의 모든 속성과 중첩된 객체 및 배열까지 모두 새로운 객체로 복제됩니다.

깊은 복사는 독립적인 복사본을 생성하므로 원본 객체와 복사본 간의 변경 사항이 서로에게 영향을 주지 않습니다.

const originalObj = { a: 1, b: { c: 2 } };
const copiedObj = JSON.parse(JSON.stringify(originalObj));

copiedObj.a=2
console.log(originalObj.a) //output 1

copiedObj는 originalObj의 모든 속성과 중첩된 객체를 재귀적으로 복사합니다. 이로써 원본과 복사본은 완전히 독립적입니다.

 

원본 객체의 b 속성을 변경해도 복사본에는 영향을 미치지 않습니다.

 

재귀적 복사는 객체나 배열 안에 또 다른 객체나 배열이 중첩된 경우에 그 안에 있는 모든 객체나 배열을 복사하는 것을 의미합니다. 이것은 중첩된 객체나 배열이 다른 객체나 배열에 대해 독립적으로 복사되어야 하기 때문에 필요한 작업입니다.