얕은 카피 -
개체의 얕은 복사본은 "주" 개체를 복사하지만 내부 개체는 복사하지 않습니다.
"내부 개체"는 원본 개체와 복사본 간에 공유됩니다.
얕은 복사의 문제는 두 개체가 독립적이지 않다는 것입니다. 한 개체를 수정하면 다른 개체에 변경 사항이 반영됩니다.
딥 카피 -
깊은 복사본은 개체의 완전히 독립적인 복사본입니다. 개체를 복사하면 전체 개체 구조가 복사됩니다.
한 개체를 수정하면 다른 개체에는 변경 사항이 반영되지 않습니다.
예시
class Program{
static void Main(string[] args){
//Shallow Copy
ShallowCopy obj = new ShallowCopy();
obj.a = 10;
ShallowCopy obj1 = new ShallowCopy();
obj1 = obj;
Console.WriteLine("{0} {1}", obj1.a, obj.a); // 10,10
obj1.a = 5;
Console.WriteLine("{0} {1}", obj1.a, obj.a); //5,5
//Deep Copy
DeepCopy d = new DeepCopy();
d.a = 10;
DeepCopy d1 = new DeepCopy();
d1.a = d.a;
Console.WriteLine("{0} {1}", d1.a, d.a); // 10,10
d1.a = 5;
Console.WriteLine("{0} {1}", d1.a, d.a); //5,10
Console.ReadLine();
}
}
class ShallowCopy{
public int a = 10;
}
class DeepCopy{
public int a = 10;
} 출력
10 10 5 5 10 10 5 10