본문 바로가기

C#

[C#] 객체 복사 : 얕은 복사와 깊은 복사 2


 깊은 복사(Deep Copy)는 참조변수가 가르키는 힙 영역 객체를 복사하는 것으로 별도의 힙 영역

객체를 생성한다. C# 에서 복사는 기본적으로 얕은 복사이기 때문에 깊은 복사는 별도로 구현해야 한다.


 객체 복사 예시.

 


 위의 예제는 앞서 설명한 복사를 예시로 만든 것이다.

 여기서 확인 할 수 있듯이 

 복사 후에 원본의 값을 바꾸면 복사 대상의 값도 변경 됨을 확인 할 수 있다.


 해서 다음과 같은 과정으로 깊은 복사를 해야 독립적으로 사용할 수 있다.


 깊은 복사 예시 클래스.

 


 ICloneable을 상속 받으면 인터페이스로 Clone을 제공한다. 물론 상속 받지 않고 그냥 별도로 

만들어도 상관없다.

 해서, Clone 함수에서 내부 값을 새로이 생성한 객체에 적용하고 리턴하도록 Clone 함수를 채워준다.


 깊은 복사 본체 예시.



 앞서 예제와 다를 바 없는 예제지만, 한 부분, 복사하는 부분에서 Clone 함수를 사용한다는 것이 차이점이다.

이 함수를 이용해서 객체를 복사하게 되면, 그 아래에서 원본의 값을 변경 하더라도 독립적으로 존재 함을 

확인 할 수 있다.