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)
       {
          ifnull == instance )
          {
              instance = new Singleton();
          }
          return instance; 
       }
 
    }
 
}




- 한 스레드가 인스턴스에 대한 접근을 끝내기전까지 다른 스레드는 대기상태여야 한다.





+ Recent posts