Section 39.1: Static 생성자

static 생성자 (constructor) 는 해당 타입의 인스턴스가 최초로 초기화되거나, static 클래스 멤버나 static 메소드가 최초로 호출될 때 수행된다. static 생성자는 멀티스레드 환경에서도 안전하게 수행된다 (thread safe). static 생성자는 일반적으로 다음과 같은 경우에 사용된다:

  • static 한 상태를 초기화한다. 이 상태는 동일 클래스의 각기 다른 인스턴스간에 공유되는 상태값이다.
  • singleton 을 생성한다.

예제:

class Animal { // * static 생성자는 해당 클래스에 // 최초로 접근할 때 단 한번 실행된다. // * static 생성자는 접근 한정자 (access modifier) 를 가질 수 없다. // * static 생성자는 파라미터를 가질 수 없다 static Animal() { Console.WriteLine("Animal initialized"); } // 클래스의 인스턴스가 생성될 때마다 실행되는 instance 생성자. public Animal() { Console.WriteLine("Animal created"); } public static void Yawn() { Console.WriteLine("Yawn!"); } } var turtle = new Animal(); var giraffe = new Animal();

출력 결과:

Animal initialized Animal created Animal created

Demo 확인하기

해당 클래스에 대한 첫번째 호출이 static 메소드인 경우, instance 생성자 호출 없이 static 생성자만 호출이 될 것이다. 그러나 static 메소드는 어차피 instance 상태값에 접근이 불가능하기에 이러한 현상은 아무런 문제를 유발하지 않는다.

Animal.Yawn();

위 코드는 다음과 같은 결과를 출력할 것이다:

Animal initialized Yawn!

"39.8 static 생성자에서의 예외 발생시의 동작" 항목과 "39.10 Generic static 생성자" 항목도 읽어두는 것을 추천한다.

Singleton 예제:

public class SessionManager { public static SessionManager Instance; static SessionManager() { Instance = new SessionManager(); } }
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts