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 메서드를 호출할 수 있어야 하기 때문입니다.