이미 존재하는 코드와 내가 원하는 인터페이스가 서로 다를 때, 인터페이스들 간에 소통을 돕는 연결 클래스를 두는 것이 좋습니다. 그렇게 중재자 역할을 해주는 클래스를 쓰는 것을, 어댑터 패턴이라고 부릅니다. 패턴 적용 전 enum QUEST_TYPE { QUESTTYPE_NONE = -1, QUESTTYPE_ORDER, QUESTTYPE_INSTANCE, }; const int MAX_ORDER_QUEST_NO = 1000; class OrderQuest { int m_nLastOrderQuestNo; public: OrderQuest(int a_nLastOrderQuestNo) { m_nLastOrderQuestNo = a_nLastOrderQuestNo; } bool isQuestRecvState()..
프로그램을 작성하다보면, 특정 객체의 복사본이 필요할 때가 있다. 이럴 때, 팩토리를 이용해 같은 종류의 객체를 만든 후 필요한 데이터를 복사하는 방식은 매우 번거롭습니다. 이 때 복사 생성자등을 통해 객체의 복사본을 만드는 것을 프로토타입 패턴이라고 합니다. class Item { protected: int m_nItemIdx; //아이템고유번호 int m_nItemNo; //아이템식별번호 public: Item() { m_nItemIdx = -1; m_nItemNo = -1; } Item(const Item & a_Item) { m_nItemIdx = a_Item.m_nItemIdx; m_nItemNo = a_Item.m_nItemNo; } virtual Item *Clone(){ return new..
여러 다른 객체를 조합해야 할 경우, 그 객체 들을 조립하는 코드가 중복이 될 여지가 있습니다. 여러 객체를 조합해 객체를 만드는 과정을 전담하는 클래스를 두는 것을 빌더 패턴이라고 부릅니다. enum ITEM_OPTION_TYPE { ITEMOPTIONTYPE_NONE = -1, ITEMOPTIONTYPE_HEAL, ITEMOPTIONTYPE_POISON, }; class ItemOption { ITEM_OPTION_TYPE m_ItemOptionType; public: ItemOption(ITEM_OPTION_TYPE itemoptiontype){ m_ItemOptionType = itemoptiontype; } }; class ItemOptionHeal : public ItemOption { //체..
함수 동작 방식은 부모 클래스에서 정의 되고, 세부적인 처리 방법은 자식 클래스에서 재정의 하는 것을 템플릿 메소드 패턴이라고 합니다. 각 클래스 마다 고유한 같은 인터페이스를 제공하면서도, 다른 동작을 하기 위한, 객체 지향 프로그래밍에서의 다형성을 나타내는 대표적인 패턴이라고 할 수 있습니다. class ItemOption { virtual bool isUseItem(){return true;} //아이템이사용가능한상태인지 virtual bool Use(){return true;} //아이템사용 virtual bool Act() { if(!isUseItem()) return false; return Use(); } }; class ItemOptionHeal : public ItemOption { vi..
어떠한 객체를 생성할 것인지를 자식 클래스 마다 다르게 하여, 클래스마다 다른 객체를 갖도록 하는 것을 팩토리 메소드 패턴이라고 합니다. class ItemOption { //각종멤버 }; class ItemOptionHeal : public ItemOption { //체력회복기능 }; class ItemOptionPoison : public ItemOption { //독기능 }; class ItemDurationType { //각종멤버 }; class ItemDurationTypeCount : public ItemDurationType //갯수제 { //갯수제처리 }; class ItemDurationTypeTime : public ItemDurationType //시간제 { //시간제처리 }; cla..
관련성 있는 객체 집합을 생성하는 인터페이스를 제공하는 방법을 추상화 팩토리 패턴이라고 한다. 팩토리는 어떤 객체가 생성될지를 전담하는 패턴이지만, 추상화 팩토리는 어떤 분류의 객체 집합을 생성할 것인지를 정해주는 패턴이라 보면 된다. class Character { //각종멤버 }; class User : public Character { //각종멤버 }; class Npc : public Character { //각종멤버 }; class Item { //각종멤버 }; class UserItem : public Item { //각종멤버 }; class NpcItem : public Item { //각종멤버 }; class ICharacterFactory { public: virtual Character..
팩토리 패턴은 서로 관련성이 있거나 책임이 같은 클래스들을 생성해 주는 클래스를 객체 생성 과정 중간에 두어 복잡도를 줄이는 방법이다. 한마디로, 객체 생성 전담자라는 의미로 생각하면 된다.class Character { //각종멤버 }; class User : public Character { //각종멤버 }; class Npc : public Character { //각종멤버 }; class Monster : public Character { //각종멤버 }; class CharacterFactory { public: static Character * CreateUser() { return new User; } static Character * CreateNpc() { return new Npc; }..
프로세스 내에 유일한 객체가 되도록 하는 것을 싱글턴이라고 합니다. template class Singleton { private: static T* m_pSingleton; Singleton() { } virtual ~Singleton() { m_pSingleton = 0; } public: static T* CreateInstance() { if(m_pSingleton == 0) m_pSingleton = new T; return m_pSingleton; } static T& Instance(void) { return (*m_pSingleton); } static T* InstancePtr(void) { return (m_pSingleton); } }; GPG 1권에 포함된 또 다른 Singleton..
- Total
- Today
- Yesterday
- 루비
- 게임데브포에버
- 디자인 패턴
- perfmon
- ruby
- EasyExec
- 조엘 온 소프트웨어
- MS-SQL
- RoR
- 루비 온 레일즈
- svn
- Rails
- 게임개발포에버
- TraceRoute
- c언어
- ftp
- 임백준
- SQLite Spy
- EzShortcut
- 디버깅
- 멀티스레드
- 엘키
- TDD
- 좋은 프로그래머
- Ruby on Rails
- 리버스 엔지니어링
- 바로가기 프로그램
- CppSQLite
- SDL
- NDC2013
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |