객체를 복사할 때 참조만 살짝 복사하는 것을 얕은 복사(Shallow Copy)라고 하고 객체를 복사할 때 별도의 힙 공간에 객체를 보관 하는 것을 깊은 복사(Deep Copy)라고 합니다. 쉽게 말해 데이타를 복사 했을 때 원본의 내용까지 같이 바뀐다면 얕은 복사이고 원본의 내용은 유지하고 싶다면 깊은 복사 입니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyClass
{
    public int a;
    public int b;

    public MyClass DeepCopy()
    {
        MyClass newCopy = new MyClass();
        newCopy.a = this.a;
        newCopy.b = this.b;

        return newCopy;
    }
}

public class Test : MonoBehaviour
{
    void Start()
    {
        // 얕은 복사 (참조 형식)
        MyClass source1 = new MyClass();
        source1.a = 10;
        source1.b = 20;

        MyClass target1 = source1;
        target1.b = 30;

        print("얕은 복사");
        print(target1.a + " " + target1.b);
        print(target1.a + " " + target1.b);
      
        // 깊은 복 (값 형식)
        MyClass source2 = new MyClass();
        source2.a = 10;
        source2.b = 20;

        MyClass target2 = source2.DeepCopy();
        target2.b = 30;

        print("깊은 복사");
        print(source2.a + " " + source2.b);
        print(target2.a + " " + target2.b);
    }
}

출력 결과:

 

얕은 복사

10 30

10 30

 

깊은 복사

10 20

10 30

Posted by 소블리애
,