번역/C# Notes for Professionals
43.4: 지연된, 스레드-안전한 Singleton (.NET 3.5 나 이전 버전들을 위한 대체 구현)
노초코
2022. 7. 25. 23:56
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/
반응형