자바스크립트에서 얕은 복사와 깊은 복사는 객체나 배열을 복제하는 두 가지 다른 방법을 나타냅니다.
데이터 구조의 중첩 정도에 따라 어떻게 동작하는지가 다릅니다.
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에서 모두 사용 가능합니다.
○ 재귀적인 방법 수동 구현
-> 직접 재귀 함수를 작성하여 객체의 모든 속성을 확인하고 복사하는 방법입니다. 이 방법은 모든 데이터 타입을 처리할 수 있으나 코드가 복잡할 수 있습니다.
'weeklypaper' 카테고리의 다른 글
브라우저의 동작 원리 (0) | 2023.12.16 |
---|---|
var, let, const 를 중복 선언 허용, 스코프, 호이스팅 관점에서 서로 비교 (0) | 2023.12.16 |
js 비교연산자 '==' 와 '===' 차이점은? (0) | 2023.12.12 |
git flow에 대해서 (0) | 2023.12.12 |
git에서 branch merge 3가지 방법 (0) | 2023.12.12 |