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

C# 정적 생성자(Static Constructor)란 무엇이고 어떻게 사용할까요?

정적 생성자(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은 모든 인스턴스가 공유하므로, 두 객체 모두 동일한 값을 출력합니다.

이처럼 정적 생성자는 정적 데이터를 초기화하거나 로그 설정, 환경 구성처럼 프로그램 전체에서 한 번만 수행하면 되는 작업을 처리할 때 유용하게 사용됩니다.