C Sharp Rookiss Part1 기초 프로그래밍 입문 : static
🐱🏍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);
}
}
}