LeeTaes 공부노트

[C#] 얕은 복사 vs 깊은 복사 (Shallow Copy vs Deep Copy) 본문

Game Programming/C#

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

리태s 2024. 6. 29. 18:42
728x90
반응형

얕은 복사 (Shallow Copy)

얕은 복사는 객체의 참조(주소값)만 복사하는 것을 의미합니다. 

즉, A객체를 B객체에 복사하였을 때 B객체의 주소는 A객체의 주소와 동일하다는 의미입니다.

class A
{
    public A(int x, int y)
    {
       this.x = x;
       this.y = y;
    }
    
    public int x;
    public int y;
}

 

위와 같은 클래스가 있다고 가정하고, 얕은 복사로 복제해보도록 하겠습니다.

A inst1 = new A(10, 10);
A inst2 = inst1;

 

inst1과 inst2는 같은 주소를 참조하게 되며, inst1의 멤버 변수의 값을 수정하면 inst2의 멤버 변수의 값 또한 동일한 값으로 수정되게 됩니다.

 

위와 같이 얕은 복사는 복사하려는 원본에 대한 새로운 객체를 생성하는데, 생성된 객체는 원본 객체를 참조한다고 정리할 수 있습니다.

깊은 복사(Deep Copy)

깊은 복사는 객체를 완전히 복사합니다.

즉, 내부의 데이터 값들을 모조리 복사하여  원본 객체로부터 완전히 독립적인 객체를 생성하는 방식의 복사입니다.

 

위와 동일한 클래스에 깊은 복사를 위한 함수를 추가로 구현해주도록 하겠습니다.

class A
{
    public A(int x, int y)
    {
       this.x = x;
       this.y = y;
    }
    
    public int x;
    public int y;
    
    public A DeepCopy()
    {
       A instance = new A(x, y);
       
       return instance;
    }
}

 

DeepCopy() 함수를 통해 복사해보면?

A inst1 = new A(10, 10);
A inst2 = inst1.DeepCopy();

inst2.y = 100;

Console.WriteLine(inst1.y);
Console.WriteLine(inst2.y);

 

다음과 같이 서로 독립적으로 동작하게 되는 것을 확인해볼 수 있습니다.

728x90
반응형

'Game Programming > C#' 카테고리의 다른 글

[C#] LINQ(Language Integrated Query)  (0) 2024.06.30
[C#] 람다식  (0) 2024.06.30
[C#] 의존성 주입(DI, Dependency Injection)  (0) 2024.06.29
[C#] as, is  (0) 2024.06.25
[C#] Delegate  (0) 2024.06.25