깊은복사, 얕은복사

ES
비고
얕은복사 : 1뎁스 까지만 복사 깊은복사 : 전체를 별도로 복사
Tags
object
deep copy
shallow copy

얕은복사

오브젝트를 복사하고 싶다고 하면 Object.assign()을 호출하면 됨.
근데 Object.assing()을 하더라도 참조형 데이터는 새롭게 할당하는 것이 아니라 ref를 복사해서 넣음.
즉, 새로운 메모리가 생성되는 것이 아니라, 같은 메모리 주소를 바라보고 있다.
따라서 한쪽에서 바꾸더라도 다른쪽의 데이터도 바뀌는 현상이 발생함.
이것을 얕은복사(shallow copy)라고 한다.
notion image

깊은복사

참조형 데이터들까지 아예 새로운 메모리에 할당해서 값을 복사하면 얕은 복사의 문제가 해결된다.
오브젝트의 속성값들이 몇 depth까지 탈 지 모르므로 순회하면서 참조형 데이터에 대한 처리를 해야함.
이것을 깊은복사(deep copy)라고 한다.
깊은복사를 해야만 복사된 다른 오브젝트에 의해 값이 바뀌는 현상을 방지할 수 있다. (불변성 유지)
notion image
💡
Lodash 라이브러리의 cloneDeep() 메소드를 통해 깊은복사 쉽게 가능.