얕은 복사와 깊은 복사

허상무·2021년 12월 23일
0

얕은 복사 Shallow Copy

객체를 프로퍼티 값으로 갖는 객체의 경우 얕은 복사는 한 단계까지만 복사하는 것

깊은복사 Deep Copy

객체에 중첩되어 있는 객체까지 모두 복사하는 것

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

// 얕은 복사
const c1 = { ...o } 
console.log(c1) // {x: {y: 1}}
console.log(o) // {x: {y: 1}} 

// 얕은 복사는 객체에 중첩되어 있는 객체의 경우 참조 값을 복사함
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

얕은 복사와 깊은 복사로 생성된 객체 원본과 복사본은 참조 값이 다른 별개의 객체다.

const v = 1

// 원시값을 복사 하는것을
// 깊은 복사라고 부르기도 함
const c1 = v
console.log(c1 === v) // true

const o = { x: 1 }

// 객체를 복사 하는것을
// 얕은 복사라고 부르기도 함
const c2 = o
console.log(c2 === o) // true

0개의 댓글