Realman's World

[C#] Shallow Copy 구현(얕은 복사) 본문

Language/C#

[C#] Shallow Copy 구현(얕은 복사)

리얼맨 2009. 1. 6. 19:32
C# 코딩을 하다보면 가끔씩 C++이 그리워 질때가 있다.
그 중의 하나가 Shallow Copy가 지원되지 않을 때이다.
C#은 항상 참조 연산이 된다.
때문에 같은 메모리를 사용한다. 이로 인해 저장한 변수를 변경하면 기존의 변수까지 변경된다.
(쉽게 말해 인스턴스를 다른 변수에 저장할 때 껍데기만 바뀔 뿐 속성은 그대로라는 말이다.)

이때 ICloneable을 사용하면 이를 해결할 수 있다.

우선, 해당 클래스를 ICloneable의 상속을 받게하고 Clone() 메소드를 선언한다.

public class Test : ICloneable
{
private int a = 0;
private int b = 1;

public object Clone()
{
this.MemberwiseClone();
}
}

이 후 해당 클래스를 복사할 때는 Clone() 메소드를 사용하면 된다.
Test cpyTest = (Test)oriTest.Clone();
Comments