[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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바