KassyLog

얕은 복사와 깊은 복사 본문

javascript

얕은 복사와 깊은 복사

Kassy_kim 2023. 1. 19. 10:54

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

깊은 복사는 객체에 중첩되어 있는 객체까지 모두 복사하는 것을 말한다.

 

객체를 대입하게 되면 참조에 의한 할당이 이루어지므로 (얕은 복사) 둘은 같은 객체이다.

const obj = { a: 1, b: 2}
const obj2 = obj
console.log(obj === obj2) // true

얕은 객체의 단점은 참조에 의한 할당이기때문에 내부 객체의 property 를 공유하게 된다.

const obj = { a:1, b:2 }
const obj2 = obj
obj2.a = 100
console.log(obj.a) // 100

 

원시값은 깊은 복사, 객체는 얕은 복사로 일어난다.

깊은 복사의 예시는 아래와 같다.

let num1 = 1; 
let num2 = num1; //num2에는 1이라는 값이 들어간다.
//num2 에 num1 자체를 넣는다.

num2 = 2;

console.log(num1, num2) 
//num1 : 1, num: 2 
//num1 : 2, num: 2 <- 얕은 복사

 

 

얕은 복사와 깊은 복사로 생성된 객체는 원본과는 다른 객체다. 

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

 

*참고 자료