정적이란 용어를 코드로는 static 으로 정의합니다. static
은 메소드나 필드가 클래스의 인스턴스가 아닌 클래스 자체에 소속되도록 지정하는 한정자
입니다.
인스턴스에 소속된 필드의 경우
class MyClass
{
public int a;
public int b;
}
public static void Main()
{
MyClass obj1 = new MyClass();
obj1.a = 1;
obj1.b = 2;
MyClass obj2 = new MyClass();
obj2.a = 3;
obj2.b = 4;
}
static 으로 한정하지 않은 필드는 자동으로 인스턴스에 소속됩니다. 인스턴스를 생성해야만 호출할 수 있습니다.
클래스에 소속된 필드의 경우
class MyClass
{
public static int a;
public static int b;
}
public static void Main()
{
MyClass.a = 1;
MyClass.b = 2;
}
static 으로 한정한 필드는 클래스에 소속됩니다. 인스턴스를 만들지 않고 클래스의 이름을 통해 필드에 직접 접근할 수 있습니다.
static 으로 한정한 필드는 프로그램 전체에 걸쳐 하나밖에 존재하지 않습니다. 프로그램 전체에 걸쳐 공유해야 하는 변수가 있다면 정적 필드를 이용하면 됩니다.
예제
class Global
{
public static int Count = 0;
public int Hello = 0;
}
class ClassA
{
public ClassA()
{
Global.Count++;
}
}
class ClassB
{
public ClassB()
{
Global.Count++;
}
}
class MainApp
{
static void Main()
{
Console.WriteLine($"Global.Count : {Global.Count}");
new ClassA();
new ClassA();
new ClassB();
new ClassB();
Console.WriteLine($"Global.Count : {Global.Count}");
}
}
출력 결과 Global.Count : 0 Global.Count : 4 |