싱글턴 패턴(Singleton pattern)이란 어떤 클래스의 인스턴스를 단 하나만 허용하고,
이 인스턴스에 접근할 수 있는 전역적인 접근을 가능하게 하는 패턴이다.
즉, 응용프로그램내에서 단 하나뿐인 전역 클래스를 만들고 싶을 때,
싱글턴 패턴을 사용하게 된다.
나 같은 경우 주로 프로그램 실행 초기에,
전역적인 환경설정 값을 로드하는 시점에서
싱글턴 패턴을 많이 사용하는 편이다.
#include <iostream> #include "Singleton.h" using namespace std; int main ( int argc, char **argv ) { CSingleton *pInstance = CSingleton::GetInstance(); pInstance->m_nAge = 100; pInstance->m_strName = "James"; CSingleton *p = CSingleton::GetInstance(); cout << "age " << p->m_nAge << endl; cout << "name " << p->m_strName << endl; return 0; } //////////////////////////////////////////////////////////////////////////////// #ifndef SINGLETON_H #define SINGLETON_H #include <string> using namespace std; class CSingleton { private: CSingleton(){}; virtual ~CSingleton(){}; void Init(); public: static CSingleton *GetInstance(); public: int m_nAge; string m_strName; private: static CSingleton *m_pInstance; }; #endif // end of SINGLETON_H //////////////////////////////////////////////////////////////////////////////// #include "Singleton.h" CSingleton *CSingleton::m_pInstance = 0; CSingleton* CSingleton::GetInstance() { if ( !m_pInstance ) { m_pInstance = new CSingleton; m_pInstance->Init(); } return m_pInstance; } void CSingleton::Init() { m_nAge = 0; m_strName = ""; }
[생각할 꺼리들]
1. 멀티쓰레드 환경에서 Instance가 생성되어 있지 않은 시점에서 동시에 GetInstance()를 호출했을 때의 문제점
2. 인스턴스에 할당된 메모리가 릴리즈 되는 시점
'소프트웨어 > 소프트웨어 공학' 카테고리의 다른 글
MVC (Mode View Controller) Pattern (0) | 2012.05.24 |
---|---|
디자인 패턴 정리 (0) | 2012.05.24 |
Observer Pattern (0) | 2012.05.24 |
Command Pattern - Replace Conditional Dispatcher with Command (0) | 2012.05.24 |