본문 바로가기

(비정기) Dlbo's Post

프로그램을 만들어 가는 과정. 1 - 무엇을 만들고 어떻게 만들까?

ㅁ_ㅁ

지난번의 "객체지향 이야기"는 더 이상의 이야기를 하자면

"디자인 패턴"이라는 복잡한 분야로 들어가야 하는데

이는 이해하기도 상당히 난해하므로 일단 접어둡니다.

객체지향의 기본도 절차지향이므로 이번 포스트 부터는 절차지향과 객체지향의 공통분모인

프로그램의 설계에 대해 언급하겠습니다.

---------------------------------------------------------------------------------------

프로그래밍을 처음 공부하는 사람이나 조금 했던 사람이나 많이 하는 사람이나 모두 공통적인

고민을 가지고 있습니다.

"뭘 만들지?"



....

예.

그렇습니다. -_-

우리에게 가장 중요한건...

뭘 만드느냐 입니다 -_-;

프로그램을 도대체 무엇을 만들 것이느냐!

하는 문제는 종종 아래의 3가지로 나뉘어 처리되곤 합니다.

    1. 클라이언트나 다른 사람으로부터 개발을 의뢰받는다.
    2. 책을 보거나 기존의 프로그램을 벤치마킹하여 그 기능을 모방한다.
    3. 학교 과-_-제를 한다.

...

3번이 압권이군요.

이제 곧 분석 포스트가 올라올 Simple VI와 Mini Shell 역시 3번의 이유로 인해 개발된 사례입니다 -_-;

1번의 경우는 프리랜서나, 심심한 대학생들이 시간은 썩어나고 노는것도 질리고 해서 시작해보는 경우가

많습니다.

2번의 경우는 프로그래밍을 처음 시작하는 경우에 많이 접하게 되는 방식이지요.

게임을 만들거나 채팅프로그램을 만들거나 메신저를 만들거나 하는 모든 것도 이런 식으로 채택이 됩니다.

자...

이걸로 대충 뭔가를 만들어 보겠다고 결정이 났다면,

....

어떻게 만드실래요?-_-?

이것이 중요합니다.

일부를 들어 이부분만 전문적으로 하는 프로그래머를 "아키텍쳐"라고 부르기도 합니다.

프로그램을 만들기 전 도입부로서 프로그램의 내부 구조를 직접 설계해 코딩작업을 훨씬 수월하게 하는

과정이지요.

주로 "어떤 언어를 쓸 것이고, 어떤 라이브러리 사용이 필요하며, 어떤 부분의 학습이 필요하다."

라고 미리 정해두고, "언제부터 언제까지 설계를, 언제부터 언제까지 코딩을, 언제부터 언제까지 디버깅을!"

이라고 구체적으로 나눠 보는 것이지요.

이번 포스트에서는 이 설계부분중 "구조 설계"에 대해서만 언급합니다.

사용자 삽입 이미지

꺄앍 -_-

더럽게 큰 그림 하나 등장.

사람마다 다르긴 하겠지만 대부분의 최고의 프로그램은 메인함수 내에 문장이

많아봐야 5~6개라고 합디다. -_-;

아, 물론 변수선언부는 빼구요. 전역변수의 사용도 최대한 금한답니다.

저 부분은 메인함수 내부에서 권장하는 실질적 처리부분들 입니다.

각각 한 칸당 한개의 함수로 처리하는걸 권하고들 있지요.

고로 최고의 구조라는건 이렇게 생겨먹은 코드라고 누군가 그랬습니다만.

디버깅하긴 편하긴 하겠다만 왔다갔다 거리기 더럽게 귀찮을듯 합니다. -_-;



호오...

메인함수가 정말 깨끗해 보이긴 합니다.

이렇게 기본 뼈대는 설계 하고 자시고도 없습니다.

그런데, 이게 반복되는것이 있습니다.

바로 파일 로드 및 초기화 부분과 저장 및 정리부분.

기본 뼈대보단 좀 더 복잡하긴 하지요.

사용자 삽입 이미지
꺄울

-_-

파일 로드 및 설정 로드 부분은 코더의 입맛에 따라, 프로그램의 형태에 따라 다릅니다.

가령 예를 들면 게임을 실행시킬때 데이터 파일을 로드해 유저의 게임 정보를 메모리에 띄워야 할 땐

그냥 템플릿 벡터를 이용해 로드하면 되고, VI를 만들땐 템플릿 리스트를 이용해 파일의 각 줄을 하나하나

리스트에 삽입해 버리는 것이지요.

설정 로드 또한 유저의 게임 환경이나 vi의 표시 환경에 대해 메모리상에 로드 한 후,

다음에 있는 초기화 부분에서 이니셜라이즈 시키는 겁니다.

이 또한 한개의 사각형에 대해 1개의 함수 사용을 권장한다고 하는군요.

-_-;

이 부분은 사용자들의 입맛에 따라 다르니 코드를 생략하도록 하겠습니다.

사용자 삽입 이미지
멋있는 친구 하나 추가 등장.

기본 구조의 가장 마지막에 있는 "저장 및 정리" 파트입니다.

동적 바인딩 해제란 "동적 메모리 할당으로 붙잡아둔 메모리들의 정리"를 의미하며,

설정 및 파일 저장이란 "여태까지 사용한 설정과 편집된 파일의 내용을 기록함"을 의미합니다.

이 또한 각 한칸당 1개의 함수 구현을 권장하고 있습니다.

사용자 삽입 이미지
프로그램에서 가장 중요한 부분을 하는 "조작 및 실행"파트입니다.

전체 뼈대 구조에서는 2번째 위치에 자리잡고 있지요?

여기서도 1칸당 1개의 함수 구현을 요구하나, 저기 가운데 보시면 내부 동작 체크와 제어 함수 동작이

서로 맞물려 돌아가고 있습니다.

두 함수가 서로 상호작용적으로 동작해 프로그램을 돌리는 것이지요.

이 부분은 바로 프로그램의 핵이나 마찬가지이고, 프로그램 그 자체라고 볼 수 있습니다.

이로서 프로그램 기본 구조에 대한 4가지를 정리해 봤습니다.

여기서 공통점을 하나 발견할 수 있는데요.

"메인함수를 포함한 대부분의 함수가 초기화->조작->정리->리턴"의 패턴을 반복한다는 점과

함수 내부에서 3~4줄 이상으로 길어질 법한 부분은 모두 다시한번 함수로 처리한다는 것입니다.

이 방법의 장점은 "디버깅이 쉽다", "코드 읽기가 수월하다" 외에도

"이미 사용한 함수가 다시한번 사용될때 재사용이 가능하다"는 점과

"상향지향성 개발과 하향지향성 개발의 중간에 있어 객체지향과 절차지향을 모두 바라볼 수 있다."라는

점이 매력적입니다.

물론 저건 메인함수를 기준으로 함수를 호출하는 방식으로 했으나,

메인함수에서의 객체 생성, 혹은 전역객체생성으로 프로그램을 동작시킨다면 객체지향적인 입장에서

프로그램을 설계할 수도 있지요.

-----------------------------------------------------------------------------------------------

오호. 이번껀 스크롤 압박이 좀 있지 싶습니다. -_-;