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
해당 클래스에 대한 첫번째 호출이 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/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
39.3: 기본 생성자 (0) | 2022.02.23 |
---|---|
39.2: 싱글톤 생성자 패턴 (0) | 2022.02.21 |
39: 생성자와 종료자 (Finalizer) (0) | 2022.02.09 |
38.7: 제네릭 타입 인자가 nullable 타입인지 확인하기 (0) | 2022.02.09 |
38.6: Nullable<T> 인자의 기반 (underlying) 타입에 대한 효과적인 사용법 (0) | 2022.02.09 |