C# 정적 필드(static)

정적이란 용어를 코드로는 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

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다