Singleton이란?
객체의 인스턴스가 하나만 만들어 질 수 있고, 어디서든 인스턴스에 접근 할 수 있도록 하는 디자인 패턴
싱글톤에서의 객체의 인스턴스는 반드시 하나만 존재하게 된다. ( 외부에서 인스턴싱 X, 생성자가 private )
또한 이 인스턴스는 전역적으로 접근 할 수 있다.
자 그럼 이제 어떻게 구현하는지 알아보자.
1. 기본형 ( 멀티스레드 환경에서 안전하지 않음, 멀티스레드 환경에선 가급적 사용 X )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public sealed class Singleton { private static Singleton instance; private Singleton() { } public static Singleton GetInstance() { if (instance==null) { instance = new Singleton(); } return instance; } } |
- 생성자를 private으로 생성하여 외부에서 생성자 호출 X
- GetInstance() 함수를 통하여 반환된 인스턴스 사용
- staitc 인스턴스변수
2. 스레드 동기화 형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public sealed class Singleton { static Singletone Instance; static readonly object sync = new object(); private Signeton() { } public static Singleton GetInstance() { lock(sync) { if( null == instance ) { instance = new Singleton(); } return instance; } } } |
- 한 스레드가 인스턴스에 대한 접근을 끝내기전까지 다른 스레드는 대기상태여야 한다.