티스토리 뷰

동일한 종류의 객체 끼리는 중복된 정보를 가지게 될 가능성이 높습니다. 그래서 같은 종류의 객체끼리 중복되는 정보를 공유하는 것이 메모리 관리 측면이나, 중복을 제거하는 측면이나 이롭습니다.

중복되는 정보를 공유 하는 방법을 플라이 웨이트 패턴이라고 합니다.

class ImageData { int m_nIdx; int m_nWidth, m_nHeight; char *m_pData; public: char *GetData(){return m_pData;} int GetWidth(){return m_nWidth;} int GetHeight(){return m_nHeight;} }; class ImagePool // ImageData의 객체 소유권은 ImagePool에 있다. { public: ImageData *GetImageData(int nIdx); };




팝업 메뉴마다 공유 될 수 있는 이미지 데이터를 메뉴 객체마다 따로 들고 있는 것은 메모리상의 중복이 생깁니다. 같은 이미지 데이터를 사용하는 메뉴 객체가 CImageData의 정보를 링크해 사용 한다면 CImageData의 관리도 한 곳에서 이뤄지는 잇점과, 위에서 말한 메모리 상의 중복도 제거할 수 있게 되는 것입니다.


class QuestInfo { int m_nQuestNo; //퀘스트식별번호 char m_szTItle[32]; //퀘스트이름 char m_szDesc[512]; //퀘스트설명 int m_nQuestMissionNo; //퀘스트목표에할당된번호 int m_nCompensateNo; //퀘스트보상번호 int m_nRequireProgressQuantity; //목표 달성을 위해 필요한 진행량 //기타등등.. }; class QuestInfoPool //QuestInfo의객체소유권은 QuestInfoPool에게있다 { public: QuestInfo *GetQuestInfo(int nQuestNo); }; class QuestData { int m_nIdx; //퀘스트고유번호 int m_nProgressQuantity; //진행량 QuestInfo *m_pQuestInfo; public: QuestData(); ~QuestData(){} //여기서m_pQuestInfo를delete 하면큰일난다. void SetQuestInfo(QuestInfo *pQuestInfo) { m_pQuestInfo = pQuestInfo; } };


퀘스트의 경우에도 퀘스트의 종류에 따라 퀘스트 이름, 설명, 보상번호, 목표 번호, 목표 달성량 같은 것은 고정된 정보이고, 퀘스트의 고유 번호, 진행량과 같은 정보는 현재 진행중인 퀘스트마다 다르다.

이렇게 고정된 정보와 변할 수 있는 정보를 나누고, 고정된 정보를 묶고 링크해서 사용함으로써 플라이 웨이트 패턴을 구현할 수 있습니다.


'Software Engineering > Design Pattern' 카테고리의 다른 글

데코레이터 패턴 (Decorator)  (2) 2008.02.09
커맨드 패턴 (Command)  (0) 2008.02.09
프록시 패턴 (Proxy)  (0) 2008.02.09
스트래티지 패턴 (Strategy)  (2) 2008.02.05
스테이트 패턴 (State)  (2) 2008.02.05
댓글