Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# static 키워드 완벽 가이드 – 정적 멤버의 개념과 사용법


C# static 키워드란?

C#에서는 static 키워드를 사용해 클래스 멤버를 정적(static)으로 정의할 수 있습니다. 클래스의 멤버를 static으로 선언하면, 해당 클래스의 객체를 몇 개를 생성하든 상관없이 정적 멤버는 메모리에 단 하나의 복사본만 존재하며, 모든 객체가 이를 공유하게 됩니다.

즉, static 키워드는 "클래스당 해당 멤버의 인스턴스가 오직 하나만 존재한다"는 의미를 담고 있습니다. 정적 변수는 객체를 생성하지 않고도 클래스 이름만으로 값에 접근할 수 있기 때문에, 상수를 정의할 때 특히 유용하게 활용됩니다.

다음은 정적 변수의 사용 방법을 보여주는 예제입니다.

예제

using System;

namespace StaticVarApplication {
    class StaticVar {
        public static int num;

        public void count() {
            num++;
        }

        public int getNum() {
            return num;
        }
    }

    class StaticTester {
        static void Main(string[] args) {
            StaticVar s1 = new StaticVar();
            StaticVar s2 = new StaticVar();

            s1.count();
            s1.count();
            s1.count();

            s2.count();
            s2.count();
            s2.count();

            Console.WriteLine("s1의 변수 num: {0}", s1.getNum());
            Console.WriteLine("s2의 변수 num: {0}", s2.getNum());
            Console.ReadKey();
        }
    }
}

실행 결과

s1의 변수 num: 6
s2의 변수 num: 6

여기서 주목할 점은, s1과 s2라는 서로 다른 두 객체가 각각 count() 메서드를 세 번씩 호출했음에도 두 객체 모두 동일한 값인 6을 출력한다는 것입니다. 그 이유는 num이 정적 변수이기 때문입니다. num은 각 객체마다 따로 존재하는 것이 아니라 클래스 차원에서 단 하나만 존재하며, s1과 s2가 이 동일한 변수를 함께 공유하기 때문입니다.

이처럼 static 멤버는 객체가 아닌 클래스 자체에 속하기 때문에, 객체를 생성하지 않고도 클래스 이름으로 직접 접근할 수 있습니다.

StaticVar.num = 10;
Console.WriteLine(StaticVar.num); // 출력: 10

참고로 C#에서 프로그램의 진입점인 Main 메서드도 반드시 static으로 선언해야 합니다. 프로그램이 시작되는 시점에는 아직 어떤 객체도 생성되지 않았기 때문에, CLR(공용 언어 런타임)이 객체 생성 없이 Main 메서드를 호출할 수 있어야 하기 때문입니다.