JavaScript의 딥 카피 및 얕은 카피
이 블로그는 무엇을 설명할까요?
JavaScript에서 개체를 복제하는 경우 얕은 복제와 심층 복제의 두 가지 주요 방법이 있습니다.
얕은 복제는 새 개체를 만들고 원래 개체에서 최상위 속성을 복사하는 것입니다. 이는 원본 개체와 일부 동일한 속성을 가진 새 개체를 만드는 빠른 방법입니다.
전체 복제는 새 개체를 만들고 중첩된 개체 및 해당 속성을 포함하여 원래 개체의 모든 속성을 복사하는 것입니다. 이것은 개체를 복제하는 보다 철저한 방법이지만 시간이 더 오래 걸릴 수도 있습니다.
다음은 JavaScript에서 얕은 복제와 깊은 복제의 몇 가지 예입니다.
얕은 클론 예:
var originalObj = {
prop1: "value1",
prop2: "value2",
nestedObj: {
nestedProp1: "nestedValue1",
nestedProp2: "nestedValue2"
}
};
var shallowClone = {};
for (var prop in originalObj) {
shallowClone[prop] = originalObj[prop];
}
console.log(shallowClone); // { prop1: 'value1', prop2: 'value2', nestedObj: { nestedProp1: 'nestedValue1', nestedProp2: 'nestedValue2' } }
이 예제에서는 for-in 루프를 사용하여 원래 개체의 속성을 반복합니다. 각 속성에 대해 동일한 값을 가진 새 개체에 추가합니다.
중첩된 개체는 값이 아닌 참조로 복사됩니다. 즉, 얕은 복제본에서 중첩된 속성을 변경하면 원래 개체에서도 변경됩니다.
shallowClone.nestedObj.nestedProp1 = "newNestedValue1";
console.log(originalObj.nestedObj.nestedProp1); // "newNestedValue1"
딥 클론 예:
var originalObj = {
prop1: "value1",
prop2: "value2",
nestedObj: {
nestedProp1: "nestedValue1",
nestedProp2: "nestedValue2"
}
};
function deepClone(obj) {
var clone = {};
for (var prop in obj) {
if (typeof obj[prop] === "object") {
clone[prop] = deepClone(obj[prop]);
} else {
clone[prop] = obj[prop];
}
}
return clone;
}
var deepCloneObj = deepClone(originalObj);
console.log(deepCloneObj); // { prop1: 'value1', prop2: 'value2', nestedObj: { nestedProp1: 'nestedValue1', nestedProp2: 'nestedValue2' } }
이 예제에서는 재귀 함수를 사용하여 원래 개체의 속성을 반복합니다. 각 속성에 대해 개체인지 확인합니다. 그렇다면 해당 속성에서 deepClone 함수를 다시 호출합니다. 개체가 아닌 경우 동일한 값을 가진 새 개체에 추가하기만 하면 됩니다.
중첩된 개체는 참조가 아닌 값으로 복사됩니다. 즉, 딥 클론에서 중첩된 속성을 변경하더라도 원래 개체에서는 변경되지 않습니다.
deepCloneObj.nestedObj.nestedProp1 = "newNestedValue1";
console.log(originalObj.nestedObj.nestedProp1); // "nestedValue1"
JavaScript에서 개체를 복제하는 몇 가지 방법이 있지만 두 가지 주요 방법은 얕은 복제와 심층 복제입니다.
얕은 복제는 새 개체를 만들고 원래 개체에서 최상위 속성을 복사하는 것입니다. 이는 원본 개체와 일부 동일한 속성을 가진 새 개체를 만드는 빠른 방법입니다.
전체 복제는 새 개체를 만들고 중첩된 개체 및 해당 속성을 포함하여 원래 개체의 모든 속성을 복사하는 것입니다. 이것은 개체를 복제하는 보다 철저한 방법이지만 시간이 더 오래 걸릴 수도 있습니다.
이것이 당신이 이것을 더 잘 이해하는 데 도움이 되었기를 바랍니다.
Reference
이 문제에 관하여(JavaScript의 딥 카피 및 얕은 카피), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vedanthb/deep-copy-and-shallow-copy-in-javascript-183m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)