IT

깊은 복사(deep copy) vs 얕은 복사(shallow copy)

eulBlue 2024. 2. 21. 15:54

최근에 깊은 복사와 얕은 복사에 대해 질문을 받았는데 생각보다 잘 알고있지 못해서

어버버 거렸던게 신경쓰여서 찾아보게 되었다 ㅎ

원래 알고있던 내용이라 "아 ~ 맞아맞아" 하는 내용도 있었고 "오 ~" 하는 새로운 내용도 있었다.

얕은 복사 (Shallow Copy)

  • 얕은 복사는 원본 데이터의 최상위 레벨만을 복사한다.
  • 중첩된 객체나 배열이 있다면, 해당 객체나 배열은 원본과 동일한 참조를 유지한다.
  • Ex : 스프레드 연산자(...), 배열의 slice() 등
  • 최상위 레벨의 객체나 배열은 새로운 객체나 배열로 복사한다.

깊은 복사 (Deep Copy):

  • 깊은 복사는 원본 데이터의 모든 중첩된 객체와 배열을 재귀적으로 복사한다.
  • 새로운 객체나 배열이 생성되며, 내부 구조를 변경해도 원본에 영향을 미치지 않는다.
  • 중첩 구조가 복잡한 경우에 사용

만약 원본의 데이터가 변경돼었을 경우 같이 바뀌는 건 어떤것일까 ? 정답은 얕은 복사의 경우이다.

이유는 내부의 중첩된 객체나 배열은 원본과 동일한 참조를 유지하기 때문에

복사본과 원본이 같은 객체를 참조하므로 두 곳에서 변경이 반영 된다.

깊은 복사를 사용한 경우, 원본과 완전히 별개로 생성되므로 영향을 주지 않게 된다.