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에서 개체를 복제하는 몇 가지 방법이 있지만 두 가지 주요 방법은 얕은 복제와 심층 복제입니다.

    얕은 복제는 새 개체를 만들고 원래 개체에서 최상위 속성을 복사하는 것입니다. 이는 원본 개체와 일부 동일한 속성을 가진 새 개체를 만드는 빠른 방법입니다.

    전체 복제는 새 개체를 만들고 중첩된 개체 및 해당 속성을 포함하여 원래 개체의 모든 속성을 복사하는 것입니다. 이것은 개체를 복제하는 보다 철저한 방법이지만 시간이 더 오래 걸릴 수도 있습니다.

    이것이 당신이 이것을 더 잘 이해하는 데 도움이 되었기를 바랍니다.

    좋은 웹페이지 즐겨찾기