게임개발 캠프 7일차

IIRU·2026년 5월 22일

< 값 타입 / 참조 타입 >


( 이미지는 나노바나나2를 사용하여 만들었습니다. )

그림을 보시면
값타입인 i는 스택 영역에 값이 바로 저장되는데
참조 타입인 j는 스택 영역에 주소값이 저장되고 힙 영역에 값이 저장됩니다.

값 타입에는 int, float, double ...이 있고
참조 타입에는 string, class, array ... 이 있습니다.


깊은복사

복사를 할 때, 원본 그대로 복사해 와서, 새로운 곳에 생성한다.

얕은복사

복사를 할 때, 원본을 그대로 가져오는 것이 아니라, 원본이 가지고 있는 주소값만 가지고 온다.

예시를 보겠습니다.

int i = 0; //깊은복사
int j = 0;
j = i;
Console.WriteLine(j);

j는 i값을 그대로 복사해서 출력합니다.
i값을 그대로 j값에 저장합니다.

Player player1 = new Player(10); //얕은복사
Player player2 = new Player(10);

player1.hp = 100;
player1 = player2;
Console.WriteLine($"{player2.hp}");

player1에 player2를 복사하게 되면 player1에 저장되는 값은 player2의 주소값이기 때문에 player1과 player2는 같은 값을 가리키게 됩니다.


그럼 얕은복사를 사용하지 않고 player1의 값을 player2로 넣어주려면 어떻게 해야할까요?

  1. 객체를 새로 만들고, 그 값을 복사
static void Cloning(Player p, Player p2)
{
    p2.hp = p.hp;
}
Cloning(player3, player4);
  1. 객체를 새로 만들 때 값을 주기
    생성자 -> 구조체 생성할 때 본거 맞음.
 public Player(int _hp)
 {
     hp = _hp;
 }
Player player5 = new Player(player3);

이런 방법이 있습니다.
추가로 더 알아보자면...

//생성자 오버로딩 가능
//기존에 존재하는 클래스를 그대로 복사해서 생성가능
public Player(Player p)
{
   hp = p.hp;
}

( 생성자도 오버로딩이 가능합니다! )


profile
초보 개발자 블로그입니다!

0개의 댓글