싱글톤 클래스는 객체 지향 프로그래밍에서 객체를 바라보는 여러 철학 중 하나이다. 이 정신(?)은 한 클래스마다 단 하나의 객체만 존재한다는 철학이다. 다음 코드에서 static과 접근지정자를 적극 활용해 CPP로 Singleton 클래스를 구현해보자.
class CSingleton
{
private:
CSingleton()
{
}
~CSingleton()
{
}
private:
static CSingleton* mInst;
public:
static CSingleton* GetInst()
{
if (nullptr == mInst)
mInst = new CSingleton;
return mInst;
}
static void DestroyInst()
{
if (nullptr != mInst)
{
delete mInst;
mInst = nullptr;
}
}
};
// mInst가 private임에도 불구하고 static 변수라 위와 같이 nullptr를 대입해 주는 것이 가능하다.
CSingleton* CSingleton::mInst = nullptr;
포인트 1.
객체의 생성자와 소멸자는 private로 둔다.
포인트 2.
static으로 만든 멤버 함수를 통해서만 객체 생성 및 소멸이 가능하게 만든다. 이 둘을 static으로 만든 이유는 객체 생성은 private으로 막혔고 static 멤버 함수는 객체 생성 없이 함수를 call 할 수 있기 때문.
포인트 3.
CSingleton 포인터를 private-static 변수로 만든다. public-static으로 선언된 멤버함수에서 이 포인터 변수를 체크.