자바스크립트에서는 객체나 배열을 복사할 때, 깊은 복사(Deep Copy) 와 얕은 복사(Shallow Copy) 라는 개념이 있다.
과연 이들의 차이는 무엇일까?
let originalObject = { a: 1, b: { c: 2 } };
// 깊은 복사 -> 값을 그대로 복사한 새로운 객체를 가져오기 위해, JSON stringify와 parse 메소드를 이용함
let deepCopy = JSON.parse(JSON.stringify(originalObject));
// 원본 객체와 깊은 복사된 객체 비교
console.log(originalObject === deepCopy); // false
console.log(originalObject.b === deepCopy.b); // false (내부 객체도 새로운 복사본을 가짐)
Object.assign(), spread operator
등을 활용할 수 있다.JSON.parse()
와 JSON.stringify()
등의 방법을 사용할 수 있다.
let originalArray = [1, 2, [3, 4]];
// 얕은 복사
let shallowCopy = [...originalArray];
// 원본 배열과 얕은 복사된 배열 비교
console.log(originalArray === shallowCopy); // false
console.log(originalArray[2] === shallowCopy[2]); // true (내부 배열은 같은 참조를 가짐)
shallowCopy
는 originalArray
의 구조는 같지만, 내부의 배열 [3, 4]
는 동일한 참조를 공유한다. originalArray
의 내부 배열을 수정하면 shallowCopy
에도 반영되게 된다.