Section 43.4: 지연된, 스레드-안전한 Singleton (.NET 3.5 나 이전 버전들을 위한 대체 구현)
.NET 3.5 나 그 이전버전에서는 Lazy<T>
클래스가 제공되지 않으므로, 다음과 같은 패턴을 대신하여 사용할 수 있다:
public class Singleton {
private Singleton() // public 한 초기화 수행을 방지한다
{}
public static Singleton Instance {
get {
return Nested.instance;
}
}
private class Nested {
// 해당 타입을 beforefieldinit 으로 표기하지 않도록
// 컴파일러에게 알려주기 위한 명시적 정적 생성자
static Nested() {}
internal static readonly Singleton instance = new Singleton();
}
}
이 구현은 Jon Skeet 의 블로그 포스팅 으로부터 영감을 받아 적성되었다.
위 예제에서 Nested
는 중첩 (nested) 된 private 클래스이므로 Sigleton
클래스의 다른 멤버들 (예들들어 public 한 읽기전용 속성값 등) 에 대한 접근으로 인해 Singleton 인스턴스의 초기화 작업이 시작되는 경우는 없을 것이다.
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
44.2: MEF 를 이용한 Dependency injection (0) | 2022.07.26 |
---|---|
44.1: C# 과 ASP.NET 에서 Unity 를 통한 Dependency Injection 사용하기 (0) | 2022.07.25 |
43.3: 스레드-안전한 지연된 Singleton (Double Checked Locking - 이중 검사 잠금 방식) (0) | 2022.07.25 |
43.2: Lazy<T> 를 이용한 지연된 (lazy) 방식의 스레드-안전한 Singleton (0) | 2022.05.19 |
43.1: 정적 (static) 초기화 방식의 Singleton (0) | 2022.05.19 |