C Sharp Rookiss Part1 기초 프로그래밍 입문 : 참조와 복사
🙇♀️복사와 참조
class == 참조!, struct == 복사!
- class Knight
// 참조 class Knight { public int hp; public int attack; }
- struct Mage
// 복사 struct Mage { public int hp; public int attack; }
- Mage와 Knight의 피를 0으로 만드는 함수
static void KillMage(Mage mage) { mage.hp = 0; } static void KillKnight(Knight knight) { knight.hp = 0; }
- 결과
- knignt.hp = 0
- 참조의 개념이므로 진퉁이 바뀜
- mange.hp = 100
- 복사의 개념이므로 짭퉁이 바뀜
- struct는 new를 사용하여 새로운 객체를 만들지 않아도 된다
- Mage mage; 가능
- knignt.hp = 0
- 객체를 여러개 만들 때
- knight를 만들 때 각 객체마다 hp, attack을 설정해야 하는데 복사본을 이용하면 편리하다
class Knight
{
public int hp;
public int attack;
public Knight Clone()
{
Knight knight = new Knight();
knight.hp = 100;
knight.attack = 10;
return knight;
}
}
이렇게 만든다면 knight2를 만들어도 knight와 별개의 객체가 된다
🪐전체코드
namespace CSharp
{
// 참조
class Knight
{
public int hp;
public int attack;
public Knight Clone()
{
Knight knight = new Knight();
knight.hp = 100;
knight.attack = 10;
return knight;
}
}
// 복사
struct Mage
{
public int hp;
public int attack;
}
class Program
{
static void KillMage(Mage mage)
{
mage.hp = 0;
}
static void KillKnight(Knight knight)
{
knight.hp = 0;
}
static void Main(string[] args)
{
Mage mage;
mage.hp = 100;
mage.attack = 10;
KillMage(mage);
Knight knight = new Knight();
knight.hp = 100;
knight.attack = 10;
KillKnight(knight);
Knight knight2 = knight.Clone();
}
}
}