싱글톤 패턴..

유일하게 하나의 정의만 있어야 하는 패턴이다.

일반적으로 우리가 쓰는 싱글톤은 다음과 같이 쓸 것이다.

Object m_obj;
Object _obj
{
    get
       {
           if(m_obj==null)
              m_obj = new Object
           return m_obj;
       {
}

하지만 여기에서 문제가 있다.

멀티스레드에 의해서 생기는 문제로 동기화가 되지 않아 여러번 생성이 된다는 경우가 종종 생긴다.

그럴 경우에는 분명 데이터가 뒤죽 박죽으로 흘러 갈 것이다.

그 다음으로 쓰는 방법이 아마 일반적으로 static 을 이용 할 것이다.

static Object m_obj;
static Object _obj
{
    get
       {
           if(m_obj==null)
              m_obj = new Object
           return m_obj;
       {
}

이는 어느 정도 문제를 해결해 주지만 한번도 쓰이지 않을 경우 메모리만 선점하고 있다는 문제가 생긴다.

필자도 저 방식으로 종종 쓰는 경우가 많다(쓰레드 환경 제외)

멀티쓰레드라면 아마 이 방법이 제일 좋을 것 같다. lock 키워드를 이용하는 것이다.

(lock은 monitor와 같이 동기화를 이용 할 때 쓰는 키워드이다.)

static Object m_obj;
static Object _obj
{
    get
       {
           if(m_obj==null)
              lock(m_obj)
              {
                 m_obj = new Object
              }
           return m_obj;
       {
}

이 방법은 인스턴트 생성시 걸리는 시간 때문이다. 이렇게 lock을 걸어 둔다면 멀티쓰레드 환경 상에서는 최소한의 속도가 유지 될 것이다.