Section 39.2: 싱글톤 생성자 패턴
public class SingletonClass
{
public static SingletonClass Instance { get; } = new SingletonClass();
private SingletonClass()
{
// 필요한 생성자 관련 코드를 이곳에 위치시킨다
}
}
위와 같은 패턴 사용 시, 생성자가 private 으로 선언되어 있으므로, SingletonClass
를 사용하는 코드에서 새로운 인스턴스를 임의로 생성할 수 없게 된다. SingletonClass
의 단일 인스턴스를 접근하기 위한 유일한 방법은 바로 SingletonClass.Instance
static 속성을 사용하는 것이다.
이 Instance
속성은 C# 컴파일러가 자동 생성하는 static 생성자에 의해 할당된다. .NET 런타임은 이 static 생성자가 Instance
속성이 최초로 읽히기 전에 반드시 한번 실행됨을 보장해준다. 그러므로, 모든 동기화 및 초기화 관련 세부사항은 .NET 런타임에 의해 처리된다.
유의할 점은, 만약 static 생성자 실행이 실패할 경우, 이 Singleton
클래스는 해당 앱 도메인의 실행 기간 전체에 걸쳐 영구적으로 사용 불가능한 상태가 될 것이라는 점이다.
또한, 이 static 생성자는 Instance
에 대한 첫번째 접근시점에 맞추어 실행됨이 보장되는 것은 아니며, 그보다 더 빠른 시점에 불리게 될 것이다. 이는 초기화가 확정된 시점에 수행되지 않게됨을 의미한다. 실제적인 사례의 경우, JIT 는 보통 static 생성자를 Instance
에 대한 참조가 일어나는 메소드의 컴파일 시점 (실행 시점이 아닌) 에 호출하게 된다. 이는 성능 최적화를 위함이다.
"43: 싱글톤 구현" 페이지에 싱글톤 패턴 을 구현하는 다른 방법들이 소개되어 있다.
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
'번역 > C# Notes for Professionals' 카테고리의 다른 글
39.4: Static 생성자 강제 호출하기 (0) | 2022.02.23 |
---|---|
39.3: 기본 생성자 (0) | 2022.02.23 |
39.1: Static 생성자 (0) | 2022.02.10 |
39: 생성자와 종료자 (Finalizer) (0) | 2022.02.09 |
38.7: 제네릭 타입 인자가 nullable 타입인지 확인하기 (0) | 2022.02.09 |