ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Singleton Pattern
    Design Pattern In C++/Singleton Pattern 2021. 4. 23. 17:45

    개발 환경 : Visual Studio 2008

    싱글톤 패턴은 단일체 패턴이라고 한다.

    싱글톤 패턴은 상당히 많은 곳에서 쓰인다.

    대표적으로 Cocos2D 엔진에서 많이 사용된다.

    Cocos2D 엔진에서 사용되는 부분은 맨 아래에서 보도록 하자.

     

    우선 아래의 내용을 보도록 하자.

     

    프로그램 실행결과

     

     

    위에서, 생성자를 private(protected)으로 두면 어떤 일이 나타날까?

     

    그러면 다음과 같은 에러 메시지가 나타난다.

    즉, 위의 에러는 생성자가 private으로 선언되어 있어서, 외부에서 생성자가 호출되지 못해 객체화가 되지 못한다.

    이 상태에서 객체화를 하려면 어떻게 해야 할까?

    첫 번째로, 클래스 내에 다음과 같이 static 변수를 하나 정의 해야 한다.

    그리고 이 변수의 초기화는 생성자에서 하지 않는다.

    그리고 아래의 GetInstance 함수는 static 변수를 동적 할당하고 리턴하는 함수이다.

    아래는 위의 내용을 토대로 작성한 클래스이다.

    static 변수의 초기화는 생성자에서 하지 않는다.

     

    아래는 메인함수이다.

     

    프로그램 실행결과

     

    위의 메인 함수를 다음과 같이 작성한 이후에 그 결과를 보도록 하자.

     

    프로그램 실행결과

    아래의 결과를 보면, 생성자가 한 번만 호출되는 것을 볼 수 있다.

     

    소스 내용

    #include <iostream>
    using namespace std;
    
    class SingleTon
    {
    private:
    	static SingleTon* m_pInstance;
    protected:
    	SingleTon(){ cout << "Constructor" << endl; }
    public:
    	void ShowName(void) { cout << "SingleTon" << endl; }
    public:
    	static SingleTon* GetInstance(void)
    	{
    		if ( m_pInstance == NULL )
    			m_pInstance = new SingleTon();
    
    		return m_pInstance;
    	}
    };
    
    SingleTon* SingleTon::m_pInstance = NULL;	//	Initialize
    
    int main(void)
    {
    	SingleTon::GetInstance()->ShowName();
    	SingleTon::GetInstance()->ShowName();
    	SingleTon::GetInstance()->ShowName();
    
    	if ( SingleTon::GetInstance() != NULL )
    		SingleTon::GetInstance();
    
    	return 0;
    }

     

     

    Cocos2D엔진에서 싱글톤 패턴이 어떻게 사용되는지 보자.

    아래는 AppDelegate.cpp 파일의 부분이다.

    CCDirector클래스가 싱글톤 클래스임을 알 수 있다.

     

    CCDirector클래스를 보자.

    아래는 CCDirector 클래스의 일부분이다.

     

    댓글

Designed by Tistory.