Booch and Rumbaugh’s Unified Notation 0.8

UML 탄생 이전에 존재했다고 판단되는, 부치의 Diagram이라고 생각됩니다. 간단하고 명확하며, 특히 개발자에게는 꼭 필요한 내용을 전달하는 좋은 다이어그램 같습니다.


별다른 설명이 없이도 명확합니다. 비록 클래스 관계만을 제시하지만, UML에서 개발자에게 클래스 관계도가 가장 최고의 설계문서 아니겠습니까?

정리하는 차원에서 살펴보면… Base Class를 기준으로하여 .. “Base Class”가(주어) “Used”를 사용하며.. “Had by Reference”와 “Had By Value”를 맴버 변수로 가지고 있는데, 각각 참조(C++에서는 포인터*나 참조형&)으로 가지고 있다는 의미이고 “Derived 1″과 “Derived 2″에 대한 부모 클래스라는 것입니다. 지금의 클래스 관계도(UML에서)를 처음 접하는 초보 사용자에게 있어서 Composition이냐? Aggregation이냐? 라는 애매모한 정의가 없다는 점이 매우 매력적입니다.

한번쯤 숙지해 놓고, 사용해 볼만한 다이어그램이라고 생각됩니다.

사용하기 간단한 Memory Pool 클래스

프로젝트 진행 중에, 다중 스레드에서 사용할 Memory Pool 클래스를 인터넷을 통해 검색해보다가 마땅히 사용만하다 판단되는 것이 없어 직접 만들어 사용하고 있는 클래스입니다. 물론 기존에 공개된 Memory Pool 클래스의 기능이 좋지 않다는 것이 아니라, 제 기준, 수준에 너무 사용하기가 어렵고 복잡하다는 생각에서입니다. 물론 그 기능과 성능은 뛰어나겠지만 말입니다. 이에.. 사용하기 쉽고, 매우 간단하게 적용할 수 있는 메모리풀 클래스를 공개해 봅니다.

먼저 사용 방법은 아래와 같습니다. 전역변수로 CMemoryPool을 생성해 놔야 합니다. 싱글리톤 패턴을 적용해야할테지만.. .일단 적용하지 않았습니다. 다른 분께서 적용해 보시고 공개해주시면 매우 영광이겠습니다.

#include "MemoryPool.h"

CMemoryPool MP(10, 1024*1024);

생성자 중 첫번째 인자는 메모리풀에 생성할 메모리 덩어리의 개수이고 두번째 인자는 메모리 덩어리의 크기입니다. 즉, 여러개의 스레드에서 동시에 10개의 메모리 덩어리를 얻어 사용할 수 있으며, 한 덩어리의 크기가 1메가라는 의미입니다.

메모리 덩어리를 얻어 사용하는 방법은 다음과 같습니다.

CMemoryPool::MEMORY_DESC *pMD = MP.Take();

BYTE *pBuffer = pMD->pBuffer; 

// .
// .
// use memory ..
// .
// .

MP.Release(pMD);

다 사용했으면 최종적으로 Release를 호출해줘서 메모리 풀에 반환해줘야 함을 잊어서는 않됩니다. 아무쪼록…. 저처럼 쉽게 사용할만한 메모리풀 소스 코드를 찾지 못하신 분들에게 도움이 되시길 바랍니다.