Shallow Copy 

- string,number 및 number타입의 기본 자료형의 데이터는 복사를 했을때 값이 복사가 되고 
  독립적인 값이 저장이 된다.
  그러나 객체의 복사는 얕은 복사 와 깊는 복사로 나눈다.
  기본 자료형처럼 복사했을때 객체는 얕은 복사가 수행된다 

-Object.assign()메소드로 복사:원본 객체의 열거가능한 모든 프로퍼티를 복사해준다.
                          단, 원본 객체가 중첩 객체인 경우 역시 얕은 복사가 수행된다.

  -중첩 객체가 아닌 경우:깊은 복사처럼 수행됨

-중첩 객체인 경우:얕은 복사가 수행됨

let obj1={ x:1,y:2,z:{z1:10,z2:20}};
let obj2=Object.assign({},obj1);
obj2.z.z1=100;
obj2.z.z2=200;
console.log(obj1);//{ x: 1, y: 2,z: { z1: 100, z2: 200}}
console.log(obj2);//{ x: 1, y: 2,z: { z1: 100, z2: 200}}

 

-Spread연산자로 객체 복사
-중첩 객체가 아닌 경우:깊은 복사처럼 수행됨

let obj1={ x:1,y:2};
let obj2={...obj1};
obj2.x=10;
obj2.y=20;
console.log(obj1);//{ x: 1, y: 2}
console.log(obj2);//{ x: 10, y: 20}

 

-중첩 객체인 경우:얕은 복사가 수행됨

 

-서드파티 라이브러리 사용

 

   <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
    <script>
        let obj1={ x:1,y:2,z:{z1:10,z2:20}};
        let obj2 = _.cloneDeep(obj1);
        console.log(obj2)
        obj1.z.z1='one';
        obj2.z.z2='two'
        console.log(obj2)
        console.log(obj1)
    </script>

 

 

deepcopy 

'학원 > REACT' 카테고리의 다른 글

02/17 [React] async/await  (0) 2023.02.17
02/16 [React] Promise  (0) 2023.02.16
02/16 [React] Spread연산자,구조분해  (1) 2023.02.16
0215 [REACT] import와 export  (0) 2023.02.15
0215 [React] class  (0) 2023.02.15

+ Recent posts