정적 생성자(Static Constructor)는 static 한정자를 사용하여 선언된 생성자입니다. 클래스가 처음으로 사용되기 전에 단 한 번만 자동으로 실행되며, 클래스의 라이프사이클에서 가장 먼저 수행되는 코드 블록입니다.
정적 생성자의 주요 특징
- 클래스당 최대 하나의 정적 생성자만 선언할 수 있습니다.
- 접근 제한자(public, private 등)를 사용할 수 없으며, 매개변수도 가질 수 없습니다.
- 첫 번째 인스턴스가 생성되거나 정적 멤버에 처음 접근하기 직전에 .NET 런타임이 자동으로 호출합니다.
- 주로 정적 필드를 초기화하거나 한 번만 수행하면 되는 초기화 작업에 활용됩니다.
C# 정적 생성자 예제 코드
다음은 C#에서 정적 생성자와 인스턴스 생성자를 함께 사용하는 예제입니다.
using System;
namespace Difference {
class Demo {
static int val1; // 정적 필드
int val2; // 인스턴스 필드
// 정적 생성자: 클래스당 딱 한 번 실행됨
static Demo() {
Console.WriteLine("This is Static Constructor");
val1 = 70;
}
// 인스턴스 생성자: 객체를 만들 때마다 실행됨
public Demo(int val3) {
Console.WriteLine("This is Instance Constructor");
val2 = val3;
}
private void show() {
Console.WriteLine("First Value = " + val1);
Console.WriteLine("Second Value = " + val2);
}
static void Main(string[] args) {
Demo d1 = new Demo(110);
Demo d2 = new Demo(200);
d1.show();
d2.show();
Console.ReadKey();
}
}
}
실행 결과
This is Static Constructor This is Instance Constructor First Value = 70 Second Value = 110 This is Instance Constructor First Value = 70 Second Value = 200
결과 분석
위 출력 결과를 보면 중요한 차이점을 확인할 수 있습니다.
- "This is Static Constructor"는 단 한 번만 출력됩니다. 정적 생성자는 객체를 두 개(d1, d2) 생성했더라도 클래스 라이프사이클 동안 오직 한 번만 실행되기 때문입니다.
- "This is Instance Constructor"는 두 번 출력됩니다. 인스턴스 생성자는
new키워드로 객체를 생성할 때마다 호출됩니다. - 정적 필드
val1의 값 70은 모든 인스턴스가 공유하므로, 두 객체 모두 동일한 값을 출력합니다.
이처럼 정적 생성자는 정적 데이터를 초기화하거나 로그 설정, 환경 구성처럼 프로그램 전체에서 한 번만 수행하면 되는 작업을 처리할 때 유용하게 사용됩니다.