Javascript
(Java Script) object / array 깊은 복사 , 얕은 복사 (deep copy, shallow copy) 특히 nested object/array에 대하여
오징옆
2023. 2. 15. 10:03
JS 배열 및 객체에서 일반적인 깊은 복사 얕은 복사 개념에 대해서는 넘어가고,
nested된 객체 및 배열에 대해 얘기한다.
nested는 "중첩된"이라는 뜻인데,
일반적으로 많이 사용하는 깊은 복사 방법인 스프레드 연산 (...) 를 통해 객체를 복사하면 깊은 복사가 되긴한다.
단, 객체 안 객체, 배열 안 배열은 깊은 복사 되지 않는다.
// 깊은 복사
let obj = {a:'a'}
let deepCopy = {...obj}
// nested object
let obj = {a:'a', nested:{b:'b'}}
let deepCopy = {...obj}
let deepCopy2 = {...obj}
deepCopy.nested.b = 'B';
deepCopy2.nested.b = 'C';
console.log(deepCopy.nested.b) // 'C'
console.log(deepCopy2.nested.b) // 'C'
외부 라이브러리 없이 해결 방법으로는
let deepCopy = JSON.parse(JSON.stringify(obj));
이 있다.
lodash 같은 라이브러리를 활용하면
import cloneDeep from 'lodash/cloneDeep';
let deepCopy = cloneDeep(obj)
도 가능하다.