#1. 깊은 복사/얕은 복사(Deep Copy/Shallow Copy)
데이터의 값 전체를 복사하는 것을 '깊은 복사(Deep Copy)'라고 하고, 참조를 복사하는 것을 '얕은 복사(Shallow Copy)'라고 한다.
값(Value) 형식의 데이터를 복사하면 깊은 복사, 참조(Reference) 형식의 데이터를 복사하면 얕은 복사가 일어난다.
struct VectorStruct
{
public float x;
public float y;
public VectorStruct(float x, float y)
{
this.x = x;
this.y = y;
}
}
class VectorClass
{
public float x;
public float y;
public VectorClass(float x, float y)
{
this.x = x;
this.y = y;
}
}
VectorStruct vs1 = new VectorStruct(5, 5);
VectorStruct vs2 = vs1; // 깊은 복사
vs1.x = 10;
Console.WriteLine(vs2.x); // 5
VectorClass vc1 = new VectorClass(5, 5);
VectorClass vc2 = vc1; // 얕은 복사
vc1.x = 10;
Console.WriteLine(vc2.x); // 10
#2. 참조 형식을 깊은 복사로 복제하는 방법
아쉽게도 C#에서 참조 형식의 완벽한 깊은 복사는 지원하지 않는다.
참조 형식 데이터 내부에 또다른 참조 형식 데이터가 있을 경우 이를 연쇄적으로 추적하여 복제해야 되기 때문이다.
C#에서 지원하는 Copy, Clone은 얕은 복사이다.
'C#' 카테고리의 다른 글
| [C#] Generic<T>의 모든 것 (1) | 2024.06.18 |
|---|---|
| [C#] property도 override가 가능하다. (0) | 2024.05.27 |
| [C#] as와 is 연산자 (0) | 2024.04.17 |