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

2024. 6. 29. 18:42·Game Programming/C#
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
'Game Programming/C#' 카테고리의 다른 글
  • [C#] LINQ(Language Integrated Query)
  • [C#] 람다식
  • [C#] 의존성 주입(DI, Dependency Injection)
  • [C#] as, is
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    fruitspuzzle
    fsoftobjectpath
    delegate
    project t.a develop
    프로젝트
    프로세스
    청년취업사관학교
    2018 kakao
    코딩테스트
    구현
    c#
    CS지식
    pcce 기출문제
    ai controller
    dataasset
    unrealengine
    2022 kakao
    후기
    C++
    Summer/Winter Coding
    2019 kakao
    프로그래머스
    Unreal Engine
    tsoftobjectptr
    Algorithm
    백준
    sesac
    issac3d
    unity
    timelessadventure
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[C#] 얕은 복사 vs 깊은 복사 (Shallow Copy vs Deep Copy)
상단으로

티스토리툴바