디자인 패턴 - 싱글톤 (Singleton)
2021. 4. 1. 09:28ㆍ개발 관련 학습정리/C#
반응형
Singleton
애플리케이션을 실행한 후 인스턴스를 하나만 생성하여 어디서든 그 인스턴스에
접근할 수 있도록 하는 디자인 패턴
일반적인 싱글톤 패턴의 클래스는 다음 3가지의 요소를 가집니다
private 생성자
private static 인스턴스 객체
public static 객체 반환 함수
public class Singleton { private Singleton() { } private static Singleton _instance; public static Singleton Instance { get { if (_instance == null) { _instance = new Singleton(); } return _instance; } } }
하지만 이럴경우
Single thread
환경에서는 정상적으로 작동하지만,Multi thread
환경에서 초기화 관련 문제가 발생합니다.그래서 lock 인스턴스를 이용하여 이러한 문제를 해결할 수 있습니다.
만약 Multi thread 환경에서 사용되는 singleton 패턴일 경우 해당 방법을 통해thread-safe
를 지킬 수 있습니다.lock 인스턴스를 활용한 thread-safe singleton
public class Singleton { private static Singleton _instance; private static readonly object _lock = new object(); private Singleton() { } public static Singleton Instance { get { lock (_lock) { if (_instance == null) { _instance = new Singleton(); } return _instance; } } } }
또한 .net 4.0 버전에서 제공하는
System.Lazy<T>
을 활용하면 lock 인스턴스 호출을 줄이고
조금 더 간단하게 singleton을 정의할 수 있습니다.Lazy를 이용한 thread-safe singleton
public class Singleton { //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; } } }
참고 자료
아래 링크는 더 다양한 버전의 싱글톤을 소개하고 있습니다.
https://csharpindepth.com/articles/singleton
반응형
'개발 관련 학습정리 > C#' 카테고리의 다른 글
디자인 패턴 - Observer Pattern (0) | 2021.04.01 |
---|---|
C# 람다 식 Lambda (0) | 2021.01.27 |
C# Generic (0) | 2021.01.27 |
C# 추상클래스와 인터페이스 (0) | 2021.01.26 |
C# Delegate (0) | 2021.01.25 |