이번에 프로젝트를 하면서 전역객체를 사용할 일이 생겼었습니다.
전역객체로 진행하던중 이왕이면 디자인패턴을 사용해보자!!!
그래서 싱글턴을 이용해 보려고 합니다.

* Singleton Patterns ::
   해당 클래스의 인스턴스가 한개만 생성해서 그 인스턴스를 전역객체 처럼 어디서든지
   사용 할 수 있게 하는 디자인패턴입니다.

// Singleton.h
class CSingleton
{
private:
    static CSingleton * m_pUniqueInst;
    CSingleton();

public:
    ~CSingleton();
    static CSingleton & GetInstance();
};

// Singleton.cpp
#include "Singleton.h"

// static 초기화
CSingleton* CSingleton::m_pUniqueInst = NULL;

CSingleton::CSingleton()
{
}
CSingleton::~CSingleton()
{
    if (m_pUniqueInst)
        delete m_pUniqueInst;
}
CSingleton & CSingleton::GetInstance()
{
    if (m_pUniqueInst == NULL)
        m_pUniqueInst = new CSingleton;

    return *m_pUniqueInst;
}



간단하게 만들어본 싱클턴입니다.
GetInstance() 멤버 함수가 static으로 선언되어 있기 때문에 아무곳에서나
호출 가능합니다. 그리고 생성자가 private로 선언되어 있기때문에 CSingleton의
인스턴스를 만들려고 하면은 컴파일 에러가 발생합니다.


ps. 위 싱글턴은 싱글스레드 용입니다. 멀티스레드에서는 문제가 생길수 있습니다.

posted by 뚱2