얕은 복사와 깊은 복사
기존에 알고 있던 복사의 개념
→ 얕은 복사를 하면 같은 참조를 가리킨다.
→ 깊은 복사를 하면 값 자체의 복사를 실행하고 다른 참조를 가리킨다.
책 내용 원본 (모던 자바스크립트 Deep Dive [p.150])
객체를 프로퍼티 값으로 갖는 객체의 경우 얕은 복사는 한 단계까지만 복사하는 것을 말하고 깊은 복사는 객체에 중첩되어 있는 객체까지 모두 복사하는 것을 말한다.
얕은 복사와 깊은 복사로 생성된 객체는 원본과 다른 객체다. 즉, 원본과 복사본은 참조 값이 다른 별개의 객체다. 하지만 얕은 복사는 중첩되어 있는 객체의 경우 참조 값을 복사하고 깊은 복사는 객체에 중첩되어 있는 객체까지 모두 복사해서 원시 값처럼 완전한 복사를 만든다는 차이가 있다.
참고로 다음과 같이 원시 값을 할당한 변수를 다른 변수에 할당하는 것을 깊은 복사. 객체를 할당한 변수를 다른 변수에 할당하는 것을 얕은 복사라고 부르는 경우도 있다.
궁금한 점...
객체를 복사하는 과정에서 구조분해 할당을 해서 복사하는 방법과 직접 대입하는 방법에 차이가 있다?
const c1 = { ...o };
와 const c1 = o;
의 차이?