1. 싱글톤

  1. 정의
  2. 구현



1. 정의

싱글톤은 디자인 패턴 중 하나로, 객체가 하나로 제한되어야 하는 경우에 사용하는 설계 방법이다.

싱글톤은 다음과 같이 설계한다:

  1. 일반적으로 생성 및 복사가 이루어져서는 안되므로, 생성자를 private 공간 안에 두고 복사 생성자와 대입 연산자의 자동 생성을 delete 로 제한한다.

  2. 하나로 제한된 싱글톤 객체는 static 변수 혹은 동적 할당으로 관리한다.

  3. 생성자 호출을 통한 객체 생성을 막아두었으므로 객체 생성 및 주소 반환용 초기화 함수가 필요하다.
    • 이 함수는 멤버 함수이지만 객체가 없어도 호출이 가능해야 하므로 static 함수로 만들어야 한다. (멤버 함수에 static 키워드가 붙으면 그 함수는 해당 객체 없이도 호출이 가능하다. 다만, 이 경우 함수 내에서 this 포인터가 존재하지 않음.)
  4. 초기화 함수는 생성 또는 이전에 생성된 싱글톤 객체의 주소를 반환한다.



2. 구현

위 설계를 static 변수로 구현하면 다음과 같다. 자주 사용되는 구문이기에 define 전처리기를 이용해 처리했다.


#define SINGLETON(Type)	public:\
							static Type* GetInst()\
							{\
								static Type single;\
								return &single;\
							}\
						private:\
							Type();\
							Type(const Type& _other) = delete;\
							void operator =(const Type& _other) = delete;\
							~Type();