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/

반응형

+ Recent posts