🐱‍🏍static

static은 유일성을 보장하는 오로지 1개만 존재하는 것

  • static은 class에 종속적!
  • 일반적인 것은 인스턴스에 종속적!
    • static 함수는 static 변수만 연산가능하다
    • 일반 변수도 가능하지만 새로운 객체를 생성해야 한다

필드에 ‘static public int counter = 1;’ 이 있다면

static public void Test()
{
    counter++;
}

static인 함수로 사용 가능하다 static 함수가 static이 아닌 변수를 사용하면 에러가 난다

  • static 함수는 class에 종속적이지만 static이 아닌것은 인스턴스에 종속적 이므로 에러

  • static 함수가 일반 변수를 사용하려면 새로운 객체를 만들어야 한다
     static public Knight CreateKnight()
    {
     Knight knight = new Knight();
     knight.hp = 100;
     knight.attack = 10;
     return knight;
    }
    
  • static은 유일성이 보장 되기에 id등에 만들 때 유용하다
  • 생성자에서 id에 counter를 넣고 counter를 1증가하면 고유 id가 만들어 진다
     public Knight()
    {
     id = counter;
     counter++;
     hp = 100;
     attack = 10;
    }
    
  • static 함수는 class에 종속적이므로 인스턴스를 통해서 불러오지 않아도 된다
  • static이 아닌 함수들은 인스턴스를 통해서 불러와야 한다
     class Program
    {
     static void Main(string[] args)
     {
         Knight knight = Knight.CreateKnight(); // static - Knight에서 바로 불러오기 가능
         knight.Move(); // 일반 - knight라는 인스턴스로 불러와야 됨
         Console.WriteLine(); // static으로 만들어진 것
         Random rand = new Random(); // static이 아닌 것
         rand.Next(0, 2);
     }
    }
    

🪐전체 코드

namespace CSharp
{
    // 참조
    class Knight
    {
        // 필드
        static public int counter = 1; // 오로지 1개만 존재!

        public int id;
        public int hp;
        public int attack;

        static public void Test()
        {
            counter++;
        }

        static public Knight CreateKnight()
        {
            Knight knight = new Knight();
            knight.hp = 100;
            knight.attack = 10;
            return knight;
        }

        public Knight()
        {
            id = counter;
            counter++;

            hp = 100;
            attack = 10;
        }

        public void Move()
        {
            Console.WriteLine("Knight 이동!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Knight knight = Knight.CreateKnight(); // static - Knight에서 바로 불러오기 가능
            knight.Move(); // 일반 - knight라는 인스턴스로 불러와야 됨

            Console.WriteLine(); // static으로 만들어진 것

            Random rand = new Random(); // static이 아닌 것
            rand.Next(0, 2);
        }
    }
}

태그:

카테고리:

업데이트: