• Shallow Copy : Clone and Merge
let user = {
 name: 'John',
 age: 30
}
// 완전히 독립된 복사본 생성
let clone = {};
for (let key in user) {
  clone[key] = user[key];
}
clone.name = 'Pete';
console.log(user.name, clone.name); // John Pete

Object의 메소드를 이용하는 방법도 있습니다. : Object.assign({}, obj)

let user = {
 name: 'John',
 age: 30
}
let clone = Object.assign({}, user);
clone.name = 'Pete';
console.log(user.name, clone.name); // John Pete

이와 같이 객체의 모든 속성 값이 Primitive Type일 경우에는 Shallow Copy만으로도 객체의 복사가 가능합니다. 하지만 속성 값이 또 다른 객체(Nested Object)인 구조일 경우에는 복사본의 Key에 참조하는 주소값이 복사되므로 중첩 객체의 구조까지 복사(Nested Cloning)해주는 반복문을 사용해야 합니다.

이 때 사용되는 표준 알고리즘이 Structured Cloning Algorithm이며, 자바스크립트 라이브러리인 "lodash"의 메소드인 _.cloneDeep(obj)를 사용하면 이 알고리즘을 직접 구현하지 않고서도 Deep Copy를 할 수 있습니다.

코드 출처: JAVASCRIPT.INFO

0개의 댓글