본문 바로가기
weeklypaper

얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)

by 띠리에이터 2023. 12. 12.

자바스크립트에서 얕은 복사와 깊은 복사는 객체나 배열을 복제하는 두 가지 다른 방법을 나타냅니다.

데이터 구조의 중첩 정도에 따라 어떻게 동작하는지가 다릅니다.

 

1. 얕은 복사(Shallow Copy)

  • 객체를 복사할 때 기존 값과 복사된 값이 같은 참조를 가리키고 있는 것을 말합니다.

  • 객체안에 객체가 있을 경우 한 개의 객체라도 기존 변수의 객체를 참조하고 있따면 이를 얕은 복사라고 합니다.

  • 즉 내부 객체나 배열은 동일한 메모리 위치를 참조하게 됩니다.

  • 얕은 복사의 방법 중 몇가지
    ○ spread 연산자
    ○  Object.assign 메서드
    ○  Array.from 메서드
    ○  slice 메서드
    ○  concat 메서드
    ○  Map 생성

 

 

 

2. 깊은 복사(Deep Copy)

  • 객체 안에 객체가 있을 경우에도 원본과의 참조가 완전히 끊어진 객체, 객체의 값 자체를 복사합니다.

  • 원본 객체와 모든 중첩된 객체 및 배열을 재귀적으로 복사하여 새로운 객체를 생성하여 독립된 메모리 공간을 가집니다.

  • 깊은 복사의 방법 중 몇가지 
    ○  JSON.stringify 와 JSON.parse 
        -> JSON.stringify 메서드로 객체를 JSON 문자열로 변환하고, JSON.parse 메서드로 다시 객체로 변환하는 방법입니다.

    ○  Lodash 라이브러리 사용
       -> Lodash는 cloneDeep라는 메서드를 제공 / 다양한 상황에서 안정적으로 동작하며, 브라우저와 Node.js에서 모두 사용 가능합니다.

    ○  재귀적인 방법 수동 구현
       -> 직접 재귀 함수를 작성하여 객체의 모든 속성을 확인하고 복사하는 방법입니다. 이 방법은 모든 데이터 타입을 처리할 수 있으나 코드가 복잡할 수 있습니다.