C#에서 Singleton 디자인패턴을 구현하는 방법
2019-08-28
싱글톤(Singleton)패턴은 애플리케이션을 실행한 이후 객체의 인스턴스가 단 한개만 생성하고자 하는 상황에서 자주 사용하는 디자인 패턴중 하나이다. C# 코드를 작성하면서 기존 습관적으로 사용하던 코드를 좀 더 우아하게 작성할 수 있는 방법이 있어 기록 해 둔다.
기존에 하던 방법
일반적인 싱클톤 패턴은 클래스 안에 다음 3개의 구성요소를 가진다.
- private 생성자
- private static 인스턴스 객체
- public static 의 객체반환 함수
따라서 코드로 작성하면 대강 이런 모양새가 나온다.
namespace Sample
{
public sealed class SomeClass
{
//private 생성자
private SomeClass() { }
//private static 인스턴스 객체
private static SomeClass _instance = null;
//public static 의 객체반환 함수
public static SomeClass Instance { get {
if (_instance == null) _instance = new SomeClass();
return _instance;
}
}
// 그 외 멤버변수 및 함수
// ....
}
}
조금 더 나은 방법
.Net 4버전 이상에서 제공하는 System.Lazy<T>
를 이용하면 객체 생성 부분을 좀 더 우아하게 처리 할 수 있다.
using System;
namespace Sample
{
public sealed class SomeClass2
{
//private 생성자
private SomeClass2() { }
//private static 인스턴스 객체
private static readonly Lazy<SomeClass2> _instance = new Lazy<SomeClass2> (() => new SomeClass2());
//public static 의 객체반환 함수
public static SomeClass2 Instance { get { return _instance.Value; } }
}
}
참고자료
아래 링크는 C#의 싱글톤 패턴의 다양한 구현체를 소개하고 실험한 블로그이다.
- https://csharpindepth.com/Articles/Singleton