Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Flutter
- 소켓
- JavaScript
- Java
- 자바스크립트
- defee
- 나만무
- 시스템콜
- TiL
- 스택
- 자바
- 크래프톤정글
- corou
- CSS
- 코드트리
- 4기
- 사이드프로젝트
- 모션비트
- 핀토스
- 크래프톤 정글
- 큐
- 오블완
- Vue.js
- 백준
- 티스토리챌린지
- 리액트
- userprog
- pintos
- 알고리즘
- HTML
Archives
- Today
- Total
미새문지
Deep Copy vs Shallow Copy 본문
728x90
Deep Copy vs Shallow Copy
Deep Copy(깊은 복사)와 Shallow Copy(얕은 복사)는 객체를 복사할 때 사용되는 두 가지 방식이며, 객체 내의 데이터를 어떻게 처리하는지에 따라 구분된다.
Deep Copy(깊은 복사)
- 깊은 복사는 객체의 모든 레벨을 재귀적으로 복사한다. 객체 내부의 다른 객체나 배열 등도 새롭게 복사되어, 복사된 객체는 원본 객체와 완전히 독립적인 복제본이 된다.
- 이 방식을 사용하면 복사된 객체를 수정해도 원본 객체에는 영향을 주지 않고, 반대의 경우도 마찬가지이다.
- 깊은 복사는 복사 과정이 상대적으로 느리고, 메모리 사용량이 더 많다는 단점이 있지만, 복사된 객체가 원본 객체와 완전히 독립적이 되므로, 두 객체 간의 상호 작용을 걱정하지 않아도 된다.
예시)
javascript// 원본 객체
const originalObject = {
a: 1,
b: {
c: 2
}
};
/* 깊은 복사 실행
JSON.parse와 JSON.stringify를 함께 사용하는 방식이 간단하고 흔하지만, 함수, Date객체, Map, Set 등
일부 객체 타입은 올바르게 복사하지 못하는 제한이 있다고 한다. */
const deepCopiedObject = JSON.parse(JSON.stringify(originalObject));
// 복사된 객체의 내부 객체 변경
deepCopiedObject.b.c = 3;
// 결과 출력
console.log("원본 객체:", originalObject);
console.log("깊은 복사된 객체:", deepCopiedObject);
// 출력 결과
// 원본 객체: { a: 1, b: { c: 2 } }
// 깊은 복사된 객체: { a: 1, b: { c: 3 } }
깊은 복사는 복사된 객체의 내부 객체를 변경해도 원본 객체에는 영향이 없는데, 이는 깊은 복사가 모든 레벨의 요소를 새로 복사하기 때문에 복사된 객체와 원복 객체가 완전히 독립적이기 때문이다.
Shallow Copy(얕은 복사)
- 얕은 복사는 객체의 최상위 레벨만 복사한다. 객체 내부에 다른 객체나 배열 등이 포함되어 있다면, 내부 요소의 참조만 복사된다. 즉, 복사된 객체와 원본 객체는 내부 요소에 대한 참조를 공유하게 된다.
- 이로 인해 복사된 객체나 원본 객체 중 하나를 수정하면 서로 영향을 받을 수 있으며, 내부 객체가 변경될 경우, 그 변경사항이 두 객체 모두에 반영된다.
- 얕은 복사는 복사 과정이 빠르고 메모리 사용량이 적다는 장점이 있지만, 내부 객체의 독립성을 유지하기 어렵다는 단점이 있다.
예시)
javascript// 원본 객체
const originalObject = {
a: 1,
b: {
c: 2
}
};
/* 얕은 복사 실행
얕은 복사는 Object.assign() 메소드나 스프레드 연산자(...)을 사용할 수 있다고 한다. */
const shallowCopiedObject = {...originalObject};
// 복사된 객체의 내부 객체 변경
shallowCopiedObject.b.c = 3;
// 결과 출력
console.log("원본 객체:", originalObject);
console.log("얕은 복사된 객체:", shallowCopiedObject);
// 출력 결과
// 원본 객체: { a: 1, b: { c: 3 } }
// 얕은 복사된 객체: { a: 1, b: { c: 3 } }
얕은 복사는 복사된 객체의 내부 객체를 변경했을 때 원본 객체도 영향을 받았는데, 이는 얕은 복사가 객체의 최상위 레벨만 복사하고 내부 객체는 참조를 공유하기 때문이다.
참조 블로그
https://the-ze.tistory.com/entry/Iteration-vs-Recursion-Deep-copy-vs-Shallow-copy
728x90
'공부 키워드 > 알고리즘 및 데이터 구조' 카테고리의 다른 글
깊이 우선 탐색(DFS, depth-first search), 너비 우선 탐색(BFS, Breadth-first search) (0) | 2024.04.02 |
---|---|
해시 테이블(Hash Table) (0) | 2024.04.01 |
스택(Stack), 큐(Queue) (3) | 2024.03.29 |
연결 리스트(Linked List) (1) | 2024.03.29 |
시간 복잡도(Big-oh Notaion) (1) | 2024.03.28 |