개발 딥 카피 란 무엇입니까? -techopedia에서 정의

딥 카피 란 무엇입니까? -techopedia에서 정의

차례:

Anonim

정의-딥 카피 란 무엇을 의미합니까?

C #에서 Deep Copy는 인스턴스 멤버와 참조 멤버가 가리키는 개체의 복사본을 포함하도록 개체의 복사본을 만드는 기술을 나타냅니다.


딥 카피는 직접 참조 된 요소 (값 유형)와 참조 (포인터)를 포함하는 참조 유형의 간접 참조 요소를 포함하는 객체의 모든 요소를 ​​포함하지 않고 데이터를 포함하는 메모리 위치에 복사합니다. 데이터 자체. 딥 카피는 원본 데이터에 대한 참조없이 새 카피 (복제본)가 생성되는 시나리오에서 사용됩니다.

Techopedia는 Deep Copy에 대해 설명합니다.

딥 카피는 객체의 참조 유형 멤버가 복사되는 방식에서 얕은 카피와 다릅니다. 두 경우 모두 값 유형의 필드 멤버를 복사하는 동안 비트 별 필드 복사가 수행됩니다. 참조 유형의 필드를 복사 할 때 얕은 복사는 참조 만 복사하는 것과 관련이있는 반면, 깊은 복사에서는 참조 된 객체의 새 복사본이 수행됩니다.


딥 카피는 값 유형의 다른 멤버와 함께 AddressInfo를 참조 유형의 멤버로 갖는 Employee 오브젝트를 고려하여 예를 들어 설명 할 수 있습니다. Employee의 깊은 사본은 Employee와 같은 값 유형의 멤버를 가진 Employee2라는 새 오브젝트를 작성하지만 AddressInfo의 사본 인 AddressInfo2라는 새 오브젝트를 참조합니다.


깊은 복사는 다음 방법 중 하나를 사용하여 구현할 수 있습니다.

  • 클래스의 복사 생성자는 값과 참조 (적절한 메모리 할당 후) 유형의 멤버를 복사하는 데 필요한 로직으로 구현할 수 있습니다. 이 방법은 지루하고 오류가 발생하기 쉽습니다.
  • System.Object.MemberwiseClone 메서드를 사용하여 값 유형이 아닌 정적 멤버를 복사 할 수 있습니다. 참조 유형의 오브젝트 사본을 작성하고 원본과 동일한 값 세트로 지정할 수 있습니다.
  • 딥 카피해야하는 오브젝트는 복원하여 직렬화 및 직렬화 해제 할 수 있습니다. 이 방법은 자동화되어 있으며 개체 멤버의 수정을 위해 코드를 변경하지 않아도되지만 다른 방법보다 느리고 복제 된 개체를 직렬화 할 수 있어야합니다.
  • 재귀와 함께 리플렉션을 사용하여 얕은 사본을 얻을 수 있으며, 이 시점에서 깊은 사본에 필요한 추가 코드를 추가 할 수 있습니다. 이 방법은 자동화되어 있으며 개체에서 필드를 추가하거나 제거하기 위해 코드를 변경할 필요가 없습니다. 부분 신뢰 환경에서는 속도가 느리고 허용되지 않습니다.
  • 중급 언어 코드를 사용할 수있어 더 빠르지 만 코드 가독성이 떨어지고 유지 관리가 어려워집니다.

깊은 복사를 구현하려면

  • 객체는 잘 정의되어 있어야하며 임의적 일 수 없습니다
  • 객체의 속성은 고려되지 않습니다
  • 특수한 경우 (관리되지 않는 참조가 포함 된 개체와 같은)를 위해 지능적으로 복제를 자동화해야합니다.
딥 카피 란 무엇입니까? -techopedia에서 정의