복사

rO_Or·2024년 7월 13일

간단한 공부

목록 보기
7/12
let obj1 = {
  name: 'ganadi',
  detail: {
    age: 17,
  },
};

let obj2 = {...obj1};
let obj3 =  JSON.parse(JSON.stringify(obj1));


obj2.name = 'gomyami';
obj1.detail.age = 3;


console.log(obj2.name); // gomyami
console.log(obj2.detail.age); // 3
console.log(obj3.detail.age); // 17

객체(혹은 배열)은 메모리 주소를 참조하는 식으로 변수가 할당된다.

그래서 let objB = objA; 이런 식으로 복사 효과를 바라고 했을 경우
objA를 수정하면 objB도 영향이 가고, 그 반대도 똑같다.

위에서 obj2obj1를 얕은 복사(shell copy)를 했는데,
새로운 참조 주소를 생성해서 name 속성을 그대로 복사해 온다.
하지만, detail 속성은 객체이므로, 같은 메모리 주소를 참조하게 된다.

그래서 obj1의 detail을 변경시키면 obj2의 detail도 변경되게 된다.

obj3는 깊은 복사(deep copy)를 했다.
위에서 나온 방법은 깊은 복사를 하는 여러 방법 중 하나이다.

객체 안에 있는 속성을 그대로 복사하게 되므로, obj1, obj2와 서로 영향을 끼치지 않아
obj1에서 그대로 복사해온 값인 17이 그대로 출력되게 된다.

profile
즐거워지고 싶다.

0개의 댓글