C#
210525 C#_얕은복사(Shallow), 깊은복사(Deep)
S_pot
2021. 5. 25. 09:35
using System;
// 얕은복사, 깊은복사 예제
namespace _210525_001
{
class MyClass
{
public int MyField1; // 인스턴스 변수
public int MyField2; // 인스턴스 변수
public MyClass DeepCopy() // 반환값: MyClass 래퍼런스
{
MyClass newCopy = new MyClass(); // 새로운 MyClass를 생성
newCopy.MyField1 = this.MyField1; // this는 source.MyField1
newCopy.MyField2 = this.MyField2; // this는 source.MyField2
return newCopy;
}
~MyClass()
{
Console.WriteLine("소멸자 호출");
}
}
class MainApp
{
static void Main(string[] args)
{
Console.WriteLine("Shallow Copy");
{
MyClass source = new MyClass();
source.MyField1 = 10;
source.MyField2 = 20;
MyClass target = source;
target.MyField2 = 30;
Console.WriteLine($"{source.MyField1} {source.MyField2}");
Console.WriteLine($"{target.MyField1} {target.MyField2}");
} // source, target 스택에서 삭제, MyClass 객체도 삭제
Console.WriteLine("Deep Copy");
{
MyClass source = new MyClass();
source.MyField1 = 10;
source.MyField2 = 20;
MyClass target = source.DeepCopy(); // 17번줄의 return값이 된다. MyField1 = 10, MyField2 = 20
target.MyField2 = 30;
Console.WriteLine($"{source.MyField1} {source.MyField2}");
Console.WriteLine($"{target.MyField1} {target.MyField2}");
}
}
}
}
출력값