객체 복사

Y·2020년 9월 6일
0

자바스크립트

목록 보기
17/20

Shallow Copy


원본 객체의 속성과 값을 새로운 객체에 그대로 할당하면, 그것은 얕은 복사가 된다.
가령 다음과 같이 구현할 수 있다.

const obj = {
  a:1,
  b:2,
  c:{
    d:1
  }
};

const copy = {};

for(let key in obj){
  copy[key] = obj[key];
};

console.log(copy.a, obj.a);// 1 1
console.log(copy.b, obj.b);// 2 2

copy.c.d = 3;

console.log(copy.c.d, obj.c.d);// 3 3
  • 또는, let copy = Object.assign({},obj)

copy.c.d 의 값을 바꿨는데, 원본 obj.c.d값까지 바뀌었다.
이는, 프로퍼티 값이 객체이면 객체의 주소를 복사하기 때문이다. 따라서, copy.cobj.c는 같은 객체를 참조하기때문에 함께 바뀌어버리게 된다. 얕은 복사는 프로토타입, 객체 설명자를 복사하지 않는다.

Deep Copy


깊은 복사는 원본 객체를 완전하게 copy하며, 프로퍼티가 객체인 경우에 새로운 메모리 공간을 통해 복사한다.

function deepCopy(obj) {
  if (obj === null || typeof(obj) !== "object") {
    return obj;
  }
    
  let copyObj = {};
  for(let key in obj) {
    copyObj[key] = deepCopy(obj[key]);
  }
  return copyObj;
}

깊은 복사를 하는 방법은 이외에도 JSON을 이용한방식, 라이브러리를 이용하는 방식이 있다.

let copyObj = JSON.parse(JSON.stringify(obj));

JSON방식으로 깊은 복사를 하면, 간단하게 깊은 복사를 할 수 있다. 하지만, 프로퍼티에 함수가 할당되어 있다면 복사가 안되기 때문에 조심해야 한다.

profile
연세대학교 산업공학과 웹개발 JavaScript

0개의 댓글