C#에서 정적(static) 클래스는 프로그램 전체에서 단 하나의 복사본만 존재하며, 인스턴스를 생성할 수 없습니다. 이를 증명하는 가장 간단한 방법은 정적 변수를 활용해 값이 계속 유지·증가하는지 확인하는 것입니다.
핵심 개념
아래 예제에서는 정적 클래스 Demo를 만들고, 그 안에 정적 변수 count를 선언합니다.
정적 변수는 마치 전역 변수(global variable)처럼 동작합니다. 클래스의 인스턴스가 여러 개 생성되더라도 정적 멤버는 모든 인스턴스가 공유하는 단일 복사본이기 때문에, 값이 초기화되지 않고 계속 누적됩니다. 이 예제에서는 클래스의 인스턴스가 오직 하나만 존재하므로 count 값이 계속 증가하게 됩니다.
예제 코드
static class Demo{
public static int count;
static Demo(){
System.Console.WriteLine("Static Constructor called");
}
}
class Program{
static void Main(){
Demo.count++;
Demo.count++;
System.Console.WriteLine(Demo.count);
Console.ReadKey();
}
}실행 결과
Static Constructor called 2
코드 설명
- 정적 생성자(Static Constructor): 정적 클래스가 처음 사용되기 전에 자동으로 한 번만 호출됩니다. 실행 결과에서 "Static Constructor called"가 딱 한 번 출력되는 것으로, 정적 생성자가 중복 호출되지 않음을 확인할 수 있습니다.
- count 값 증가:
Main메서드에서Demo.count를 두 번 증가시켰으므로 최종 값은 2가 출력됩니다. - 단일 인스턴스 증명: 프로그램이 종료될 때까지
count값이 유지되고, 정적 생성자가 한 번만 실행된다는 점이 곧 정적 클래스의 인스턴스가 하나만 존재함을 보여주는 증거입니다.
이처럼 정적 클래스는 인스턴스화할 수 없고, 컴파일러가 자동으로 private 생성자를 제공하기 때문에 프로그램 lifetime 동안 단일 복사본만 존재한다는 사실을 코드로 간단히 검증할 수 있습니다.