CSharpNotes.43-4.md

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/

반응형

+ Recent posts