- 객체 생성이 복잡하고, 클래스간 Composition관계가 Inheritance관계보다 많을때 사용
- 객체의 생성 과정을 외부에 숨기거나 실제 어떤 객체가 생성되어 실행되는지를 감추기 위한 설계 유형들
Class 생성패턴과 객체 생성 패턴 차이
클래스 생성 패턴: 객체 생성시 Inheritance사용
객체 생성 패턴 : 객체 생성을 다른 클래스에 위임
Abstract Factory(객체 생성)
Singleton : Object Creational
prototype 과 singleton 패턴
1. prototype 패턴 (쌍둥이)
이미 생성된 객체를 복제해서 새로운 객체를 생성하는 방법
(게임블리오에서 clone() 개념으로 오브젝트의 정점 구성정보는 같지만 위치행렬와 같이 서로 다른 정보를 가져야하는것은 다르게 할수 있다)
- 객체 생성 방식이나 구성 형태, 표현 방식 등과 무관하게 객체를 생성 하고 싶을때 유용
- 생성할 객체가 run-time 시에 결정 되어 질때 유용
2. singleton 패턴 (단 한개!)
객체가 생성되는 개수를 제한 하는 형태의 설계가 singleton 패턴 이라 하고 극단적으로 제한되는 객체의 개수가 1개일 때를 감안한 패턴 (최대 N개 까지만 객체를 생성 하도록 제한)
- 패턴 구현시 모든 생성자는 protected 영역에 정의 되어야 함.
- 상속 관계에 놓인 클래스들에 대해 전체적으로 생성되는 객체의 최대 개수를 제한 하고자 할때 유용
매크로로 쉽게 싱글턴 클래스 만들기
보통 싱글턴를 만들어주는 클래스를 상속 받아 싱글턴 클래스를 만들지만 가끔 그것때문에 꼭 필요한 클래스를 상속받으려고 하면 걸림돌이 생긴다. 다중상속이 그렇게 좋은것도 아니고..
//클래스선언부분에만들어주는매크로로클래스안에싱클턴의인스턴스와관련함수자동으로선언(.h)
#defineDECLEAR_SINGLETON( className )\
public:\
staticclassName* Instance();\
virtualvoidreleaseInstance();\
private:\
staticclassName* m_pInstance;
//클래스정의부분을만들어주는매크로로클래스안에싱클턴의인스턴스와관련함수자동으로선언(.cpp)
#defineIMPLEMENT_SINGLETON( className )\
className* className::m_pInstance = NULL;\
className* className::Instance()\
{\
if ( NULL == m_pInstance )\
{\
m_pInstance = newclassName;\
}\
returnm_pInstance;\
}\
voidclassName::releaseInstance()\
{\
if ( NULL != m_pInstance )\
{\
deletem_pInstance;\
m_pInstance = NULL;\
}\
}
//클래스밖에선언되는매크로로외부에서싱글턴클래스의인스턴트를가져올때사용된다.
#defineCREATE_FUNCTION( className , funcName ) \
staticclassName* ##funcName()\
{\
returnclassName::Instance();\
};
위의 3개의 매크로로 손쉽게 싱글턴 클래스를 만들수 있다.
(참고로 #define는 한줄해당하는 것만 인식하기때문에 \넣어 줄 연결 표씨를 한거다.)