얕은 복사 & 깊은 복사

결론

얕은 복사 : 객체를 한 단계까지만 복사하는 것
깊은 복사 : 객체에 중첩되어 있는 객체까지 모두 복사하는 것

설명

const o = { x: { y: 1 } }

// 얕은 복사
const c1 = { ...o }
console.log(c1 === o) // false
console.log(c1.x === o.x) // true

const _ = require('lodash')
// 깊은 복사
const c2 = _.cloneDeep(o)
console.log(c2 === o) // false
console.log(c2.x === o.x) // false

얕은 복사와 깊은 복사로 생성된 객체는 원본과 다른 객체입니다. 즉, 원본과 복사본은 참조 값이 다른 별개의 객체입니다.
하지만 얕은 복사는 객체에 중첩되어 있는 객체의 경우에는 참조 값을 복사하고, 깊은 복사는 객체에 중첩되어 있는 객체까지 모두 복사해서 원시 값처럼 완전한 복사본을 만든다는 차이가 있습니다.

원시 값을 할당한 변수를 다른 변수에 할당하는 것을 깊은 복사, 객체를 할당한 변수를 다른 변수에 할당하는 것을 얕은 복사라고 부르는 경우도 있습니다.

참고

  • 모던 자바스크립트 Deep Dive

Written by정선아
🌱 공부한 것을 기록하여 성장하기 위한 블로그입니다.

GitHubGmail