본문 바로가기

개인공부/C#

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

 

■ 얕은 복사(Shallow Copy) :

 - 새 메모리 공간 할당하지 않음, 주소 값만 복사

 - 복사된 두 객체는 동일한 메모리 사용

 

■ 깊은 복사(Deep Copy) :

 - 새  메모리 공간 할당, 값 자체를 복사

 - 복사된 두 객체는 독립적으로 메모리 사용 

 

■ Example

class TestClass
{
    public int x;
    public int y;
    public TestClass DeepCopy()
    {
        TestClass testCopy = new TestClass();
        testCopy.x = this.x;
        testCopy.y = this.y;

        return testCopy;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine($"[Shallow Copy Example]");

        TestClass shallowTest1 = new TestClass();
        shallowTest1.x = 100;
        shallowTest1.y = 200;

        TestClass shallowTest2 = shallowTest1;
        shallowTest2.x = 300;
        shallowTest2.y = 400;

        Console.WriteLine($"shallowTest1.x : {shallowTest1.x}, shallowTest1.y : {shallowTest1.y}");
        Console.WriteLine($"shallowTest2.x : {shallowTest2.x}, shallowTest2.y : {shallowTest2.y}");
        Console.WriteLine();


        Console.WriteLine($"[Deep Copy Example]");
        TestClass deepTest1 = new TestClass();
        deepTest1.x = 100;
        deepTest1.y = 200;

        TestClass deepTest2 = deepTest1.DeepCopy();
        deepTest2.x = 300;
        deepTest2.y = 400;
        Console.WriteLine($"deepTest1.x : {deepTest1.x}, deepTest1.y : {deepTest1.y}");
        Console.WriteLine($"deepTest2.x : {deepTest2.x}, deepTest2.y : {deepTest2.y}");
    }
}

 

Example 결과

 

 

'개인공부 > C#' 카테고리의 다른 글

[C#] 접근 제한자(Access Modifier)  (0) 2022.09.06
[C#] 정적(Static) 클래스, 필드, 메서드  (0) 2022.09.05
[C#] 클래스(Class)  (0) 2022.09.01
[C#] Call by Value, Call by Reference  (0) 2022.08.31
[C#] 메서드(Method)  (0) 2022.08.31