본문 바로가기

프로그래밍/C++

단일체

Design Pattern에서 이야기하는 단일체의 기본형은


class Singleton{
public:
static Singleton getInstance(){ return selfInstance; }

private:
SIngleton();
static Singleton *selfInstance = new Singleton();
};


였다.

요새 가능하면 모든 프로그램을 정적으로 만들려던 나에게
저 방식은 C++에서는 무조건 메모리 해제가 필요한 상황이었고,
게다가 생성은 명시적으로 안 해주면서 해제의 책임은 지워야하는
정말 맘에 안 드는 방식이었다.

이에 고민하던 중 승중이가 알려준 방식이 있었으니
바로 이것이다.


class Singleton{
public:
static Singleton &getInstance();

private:
Singleton();
Singleton( const Singleton & ); // 복사생성자를 막는다.
};

Singleton &Singleton::getInstance()
{
static Singleton selfInstance;
return selfInstance;
}



진짜 딱 듣고 와 !하는 감탄사를 흘릴 수밖에 없었다.
대체 이게 무엇인고..
포인터를 만들지도 않고 소멸도 알아서 해주는..
그냥 완전 척척박사가 아닌가..!!

알고보니 More Effective C++에 있는 내용이었다. (항목 26.)
책을 보니 단일체라는 말은 나와있지 않고
저런 방식이 나와있던 것이었다.
단일체에 대해서 별로 관심을 가지지 않았을 때는
그냥 대수롭지 않았는데,
정말 필요할 때 보고는 감탄에 감탄에 감탄고토을 내질렀다.

이걸 보고는 Modern C++ Design과 The C++ Programming Language를 질렀다. (원태방식 인과율)

'프로그래밍 > C++' 카테고리의 다른 글

[C++] Insertion Sequance( std::vector, ... )  (4) 2006.04.19
[C++] 선언 없이 단 한 번만 실행되기  (6) 2006.04.03
Java의 Package  (0) 2006.02.22
[C++]예외 처리  (0) 2006.02.03
[C++]클래스와 구조체  (2) 2006.02.03