
■ 제네릭 싱글톤 (Generic Singleton)
○ 특징과 용도
- 제네릭 싱글톤은 특정 타입을 사용하여 싱글톤 인스턴스를 생성하는 디자인 패턴
- 제네릭을 사용하면 여러 타입에 대해 동일한 싱글톤 패턴을 구현할 수 있어, 다양한 타입에 유연하게 대응할 수 있는 싱글톤을 구현하는 데 유용함
- 보통 C# 같은 언어에서 제네릭 싱글톤은 static 키워드를 이용해 구현되며, 이를 통해 스레드 안전성을 확보할 수 있음
○ 제네릭 싱글톤 구현 예시
public class Singleton<T> where T : class, new()
{
private static readonly Lazy<T> _instance = new Lazy<T>(() => new T());
public static T Instance => _instance.Value;
// 생성자를 private으로 설정하여 외부에서 인스턴스 생성을 방지
private Singleton() { }
}
Lazy<T>
.NET에서 제공하는 Lazy를 사용하여 스레드 안전성을 갖춘 지연 초기화된 인스턴스를 생성함
Instance
Lazy.Value는 첫 접근 시 초기화되며 이후에는 캐시된 인스턴스를 반환함
where T : class, new()
제네릭 타입 T는 클래스이어야 하며 매개변수가 없는 기본 생성자가 있어야 함
private Singleton()
외부에서 생성자를 통해 인스턴스를 생성하는 것을 방지함
○ 사용 예시
public class MyClass { }
var instance1 = Singleton<MyClass>.Instance;
var instance2 = Singleton<MyClass>.Instance;
// instance1과 instance2는 동일한 참조를 가짐
Console.WriteLine(object.ReferenceEquals(instance1, instance2)); // true
- 제네릭 싱글톤은 타입별로 유일한 인스턴스를 유지하기 때문에 위와 같은 형태로 사용할 수 있음
- 이렇게 하면 특정 타입의 싱글톤 인스턴스만 필요할 때마다 생성할 수 있음
- 필요할 경우 새로운 타입의 싱글톤 인스턴스도 생성할 수 있는 유연성을 확보할 수 있음
■ 연습 : 싱글톤 베이스와 매니저 스크립트