행복한 아빠

알고리즘 보다는 구조에 집중하세요 본문

SW디자인

알고리즘 보다는 구조에 집중하세요

행복한아빠 2010. 4. 5. 13:20
여기서 말하는 "구조"는 데이터 구조를 이야기합니다. 우리의 소프트웨어는 크게 두 가지 부분으로 동작합니다. 하나는 우리가 사용하는 데이터(메모리, 변수, 배열 ...)와 그 데이터를 다루기 위한 명령의 집합인 알고리즘입니다.
동일한 기능을 제공하는 프로그램이라도 데이터의 구조와 알고리즘은 다를 수 있고 프로그램의 성격에 따라 데이터 구조가 복잡해질 수도 있고 알고리즘이 복잡해질 수도 있습니다.

알고리즘 보다는 구조

내가 학교에 다닐 때는 프로그램을 잘 하는 사람은 알고리즘을 잘 짜는 사람이라고 생각했습니다. 오랜 동안 이쪽에서 일하다보니 그 생각이 잘못되었다는 것을 알았습니다.
우리가 시스템이나 프로그램을 만들때 집중해야 할 것 중 하나는 풀어야 할 문제의 본질을 찾아 단순화하는 것입니다. 경험상 단순화된 본질은 대부분 데이터 구조에 있다는 것을 알았습니다.

유용한 방법 하나

유한상태기계(FSM - Finite State Machine)를 쉽게 구현하는 방법을 소개합니다. 내가 자주 사용하는 방법 중 하나입니다. FSM은 다음과 같이 특정 개체의 상태변화를 관리하는 방법을 말합니다.



위 상태 변화를 관리하는 프로그램을 만들 때 알고리즘을 이용해 만든다면 꽤 복잡한 코드가 나올 것입니다. "등록" 상태일 때는 "진행중"으로만 변경될 수 있고 "완료"일 때는 "취소"로 변경할 수 없고 등등 IF THEN ELSE 코드들이 쭉 나열될 것입니다. 더 나쁜 건 상태머신 변경되면 코드도 여러군데 고쳐야 할 것입니다.

다음과 같은 이차원 테이블을 이용하면 꽤 간단한 코드로 상태머신 구현이 가능합니다.


이 구조로 이차원배열을 사용한 테이블을 만들거나 객체모델을 적당히 하면 구현코드에 IF ELSE가 없어질 뿐만 아니라 상태의 변화가 오던지 심지어 새로운 상태가 추가되더라도 코드의 변화는 없을겁니다. 다만 테이블에 데이터만 추가하면 됩니다.


설계가 중요합니다

설계 없이도 프로그램 작성이 가능합니다. 그러나 좀 더 큰 프로그램이나 나은 프로그램을 작성하려다 보면 코드가 기하급수적으로 늘어나고 복잡해지는 경향이 있습니다.

문제의 핵심을 정확히 보고 이를 단순화하기 위한 구조를 찾아야 합니다. 문제의 본질(essence)은 구조에 있는 경우가 많습니다. 클래스 설계나 ERD 설계등을 하는 것이 중요한 이유는 문제의 본질을 찾고 단순화하기 위한 과정이기 때문입니다.

문제의 본질을 파악하는 행위가 설계입니다.
표준대로, 산출물을 만들기 위해, 뻔한 클래스를 모델로 표현하기 위해 그리는 설계는 진짜 설계가 아닙니다. 설계는 꽤 머리도 아프고, 끝냈을 때는 아주 보람있는 작업입니다.

먼저 코딩하고 싶은 유혹을 조금만 누르고 문제의 본질을 찾기 위한 설계단계를 거친다면 다른 사람들이 감탄할만한 프로그램이 나올 수도 있습니다. ^^




'SW디자인' 카테고리의 다른 글

빚 장부를 관리하십니까?  (7) 2010.04.26
알고리즘 보다는 구조에 집중하세요  (9) 2010.04.05
Dependency Injection-1  (5) 2009.12.30
AOP와 filter  (2) 2009.11.17
클래스 설계에서 "관계" 집중 조명  (0) 2008.03.16
Dependency Injection-3  (0) 2008.03.15
9 Comments
댓글쓰기 폼