(이 글은 McCONNELL의 'CODE COMPLETE'에 있는 내용을 많이 인용한 것임을 알려드립니다.)

CODE COMPLETE를 읽은 후에 그곳에 있는 내용 중, 맘에 와닿아서 애용하는 방법입니다...

이 책에 이런 예가 나오지요...
만약에, 개집을 하나 만든다고 칩시다. 그 경우에는 아무런 설계도도 필요 없습니다.
그냥 나무판자와, 톱과, 망치를 가지고 만들기 시작합니다.
적당히 짜르고 못질해서 만들고, 만약에 잘 맞지 않는 부분이 있다면 다시 톱질하고 짜맞추면 됩니다.
하지만, 엠파이어 스테이트 빌딩을 만드는데, 설계도가 없이 만들기 시작한다면 어떻게 될까요?

...

프로그램을 만들 때도 마찬가지입니다. 작은 프로젝트를 할 때는 아무 설계도 없이 시작해도 됩니다.
하지만, 큰 프로젝트를 만들어 갈 때, 사전 설계는 필수입니다.
그것이 플로우차트가 되건, UML이 돼건, 기획서가 돼건... 어쨋건 필요한겁니다.

제 생각에, 큰 프로젝트라는건 기준이 없습니다. 그 사람의 역량에 따라서 다를겁니다.
하지만, 머리속으로 생각 한번 해보고, 곧바로 전체에 대한 그림이 그려지지 않는 규모라면,
또는, 그것을 완성하기까지의 과정이 조금이라도 부담스럽게 다가온다면...
그게 바로 그 사람에게 있어서 큰 프로젝트라고 할 수 있을겁니다.

뭐, 전체적인 설계를 하는 법을 자세하게 알려드릴 수는 없지만,
제가 애용하는 방법 두 가지를 제시해 봅니다.

첫번째는, 일단 이면지를 하나 준비해서, 연필과 지우개를 가지고 그림을 그려보는 겁니다.
UML을 사용한다면 더 좋겠지만, 왠지 형식에 얽매여서 중요한 내용을 놓칠 수도 있기 때문에,
저 같은 경우에는 완전 Freestyle로 시작합니다. 그냥 동그라미 하나 그리고, 내용을 쓰고,
그 내용끼리 화살표로 연결하고, 다시 검토하면서 문제점을 찾아가봅니다.
좀 장난같이 보일지 몰라도, 프로젝트 전체의 일관성을 잡아가는데 큰 도움이 됩니다.

그 다음에 코딩을 들어갑니다. 저의 경우에는 Top-Down 방식을 선호합니다.
시스템->컴포넌트->클래스->로직의 단위로 코딩해 들어가되, 상위의 것 부터 시작합니다.
어느 정도 틀이 잡혔으면 로직입니다. 여기서 제가 선호하는 방식은 "주석으로 코딩하기 입니다"

예를 들어...
void MainRoutine()
{
// 변수들을 초기화한다

// 루프 시작 ( 리스트에서 오브젝트를 하나씩 얻어온다)
//// 리스트를 검색해서 오브젝트를 얻어온다.
//// 오브젝트의 상태를 확인한다
//// 각 상태에 대한 동작을 수행한다 - Obj->Run();
// 루프 끝
}

int CObj::Run()
{
// 상태 검사
// switch 시작...
//// 휴식 상태->계속 쉰다(-_-;;)
//// 목표를 향해 이동->목표에 근접했나?
////// 공격할건가? 말건가? -> 해당 동작 수행
//// ...
// swtich 끝
// 해당 행위에 대한 패킷 전송...
}

대충 이런 식으로 만들어놓고, 주석과 주석 사이에 코딩을 끼워넣는겁니다.
그러면, 코딩이 다 끝난 다음에 디버깅 할 때에도 한 눈에 잘 보이고 좋습니다 -0-;;

뭐 허접한 글이군요 -_-;;;
[작성완료] 버튼 누르기가 망설여집니다. -_-;;;
아뭏든 McCONNELL의 CODE COMPLETE는 프로그래머라면 한번쯤을 읽어볼만한 좋은 책이니;;;