객체를 복사할 때 참조만 살짝 복사하는 것을 얕은 복사(Shallow Copy)라고 하고 객체를 복사할 때 별도의 힙 공간에 객체를 보관 하는 것을 깊은 복사(Deep Copy)라고 합니다. 쉽게 말해 데이타를 복사 했을 때 원본의 내용까지 같이 바뀐다면 얕은 복사이고 원본의 내용은 유지하고 싶다면 깊은 복사 입니다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyClass { public int a; public int b; public MyClass DeepCopy() { MyClass newCopy = new MyClass(); newCopy.a = this.a; newCopy.b = this.b; return newCopy; } } public class Test : MonoBehaviour { void Start() { // 얕은 복사 (참조 형식) MyClass source1 = new MyClass(); source1.a = 10; source1.b = 20; MyClass target1 = source1; target1.b = 30; print("얕은 복사"); print(target1.a + " " + target1.b); print(target1.a + " " + target1.b); // 깊은 복 (값 형식) MyClass source2 = new MyClass(); source2.a = 10; source2.b = 20; MyClass target2 = source2.DeepCopy(); target2.b = 30; print("깊은 복사"); print(source2.a + " " + source2.b); print(target2.a + " " + target2.b); } }
출력 결과:
얕은 복사
10 30
10 30
깊은 복사
10 20
10 30
'프로그래밍 언어 > C#' 카테고리의 다른 글
C# 델리게이트와 이벤트 (0) | 2019.12.05 |
---|---|
C# 구조체와 클래스 차이점 (0) | 2019.12.04 |
C# Queue와 Stack 사용방법 및 차이점 (1) | 2019.12.04 |
C# Hashtable과 Dictionary 사용방법 및 차이점 (0) | 2019.12.04 |
C# ArrayList와 List 사용방법 및 차이점 (0) | 2019.12.04 |