[C#] 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy)

2024. 5. 30. 10:02·C#

#1. 깊은 복사/얕은 복사(Deep Copy/Shallow Copy)

데이터의 값 전체를 복사하는 것을 '깊은 복사(Deep Copy)'라고 하고, 참조를 복사하는 것을 '얕은 복사(Shallow Copy)'라고 한다.

값(Value) 형식의 데이터를 복사하면 깊은 복사, 참조(Reference) 형식의 데이터를 복사하면 얕은 복사가 일어난다.

struct VectorStruct
{
    public float x;
    public float y;

    public VectorStruct(float x, float y)
    {
        this.x = x;
        this.y = y;
    }
}

class VectorClass
{
    public float x;
    public float y;

    public VectorClass(float x, float y)
    {
        this.x = x;
        this.y = y;
    }
}
VectorStruct vs1 = new VectorStruct(5, 5);
VectorStruct vs2 = vs1; // 깊은 복사
vs1.x = 10;
Console.WriteLine(vs2.x); // 5

VectorClass vc1 = new VectorClass(5, 5);
VectorClass vc2 = vc1; // 얕은 복사
vc1.x = 10;
Console.WriteLine(vc2.x); // 10

#2. 참조 형식을 깊은 복사로 복제하는 방법

아쉽게도 C#에서 참조 형식의 완벽한 깊은 복사는 지원하지 않는다.

참조 형식 데이터 내부에 또다른 참조 형식 데이터가 있을 경우 이를 연쇄적으로 추적하여 복제해야 되기 때문이다.

C#에서 지원하는 Copy, Clone은 얕은 복사이다.

'C#' 카테고리의 다른 글

[C#] Generic<T>의 모든 것  (1) 2024.06.18
[C#] property도 override가 가능하다.  (0) 2024.05.27
[C#] as와 is 연산자  (0) 2024.04.17
'C#' 카테고리의 다른 글
  • [C#] Generic<T>의 모든 것
  • [C#] property도 override가 가능하다.
  • [C#] as와 is 연산자
Logger's
Logger's
생각을 담는 공간 이곳은 게임 개발 아카이브
  • Logger's
    Game Development Archive
    Logger's
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • Unity (7)
      • C# (4)
      • 디자인 패턴 (3)
      • 자료구조&알고리즘 (0)
      • Tip (5)
      • 이슈 해결 (3)
      • IDE (2)
      • C++ (0)
      • C++ STL (0)
      • DirectX (0)
      • 잡담 (0)
      • 취미 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    .editorconfig
    swipe
    drag
    모바일 환경
    DirectX #Texturing
    DirectX #Supersampling
    utf-8
    Unity
    Computer Graphics
    한글 깨짐
    DirectX #Refraction #Reflection
    유니티
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
Logger's
[C#] 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy)
상단으로

티스토리툴바