🙇‍♀️복사와 참조

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; 가능
  • 객체를 여러개 만들 때
    • 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();
        }
    }
}

태그:

카테고리:

업데이트: