특히 단 하나의 객체만의 필요한 Class의 경우 싱글톤은 사용하면, 여러 곳에서 각각 생성될 경우를 제거 할수 있습니다.
싱글톤을 구현하는 방법은 많습니다.
싱글톤으로 사용되어져야할 Class 안에 static 포인터 및 함수들을 선언하여 구현하는 방법.
싱글톤의 기능을 구현한 Class를 상속받아서 사용하는 방법
등등...
기존에 구현해 놓은 Class를 전혀 손대지 않고, Singleton 을 사용하는 가장 간편한 방법은
Template 을 이용하여 Singletone Class를 구현하여 사용 하면 됩니다.
Singletone Class의 코드는 아래와 같습니다.
[-] Collapse
#pragma once
template <typename T>
class CSingleton
{
private:
static T *pInstance;
public:
static T& Get()
{
if(pInstance == NULL) pInstance = new T;
return *pInstance;
}
static T* GetPtr()
{
if(pInstance == NULL) pInstance = new T;
return pInstance;
}
static void Release()
{
if(pInstance != NULL) delete pInstance;
}
};
template <typename T>
class CSingleton
{
private:
static T *pInstance;
public:
static T& Get()
{
if(pInstance == NULL) pInstance = new T;
return *pInstance;
}
static T* GetPtr()
{
if(pInstance == NULL) pInstance = new T;
return pInstance;
}
static void Release()
{
if(pInstance != NULL) delete pInstance;
}
};
기존에 구현해 놓은 Class를 이 CSingleton Class 를 이용하여 사용하는 방법은 아래와 같습니다.
첫째, 전역으로 사용할 Class의 포인터를 선언하고 CSingleton pInstance 를 NULL로 설정한다. (cpp 파일 윗쪽에 위치)
[-] Collapse
CTestClass* CSingleton<CTestClass>::pInstance = NULL;
둘째, 아래와 같이 GetPtr() 을 이용하여 사용한다.
[-] Collapse
CSingleton<CTestClass>::GetPtr()->Func();
참 쉽죠잉~
댓글 없음:
댓글 쓰기