초등학교때, GW베이직을 배우면서 순서도라는것을 배웠고...  
(왠 초딩때? 라고 하겠지만 학교 정규과정이 아니라 학교에서 방과후에 돈내고 배우는걸 했었어요)

그 이후로 대학에서 C로 과제를 제출하기 위해 프로그램 구조를 짤때도
역시 순서도같은 식으로 나열을 하고 몇가지 작업들을 쪼갰다.
근데 요즘들어 이게 정답일까? 고민한다.


1. 절차지향적 구현 (C, Basic ... ) -- 기능적 관점

내가 대학교 아니... 지금도 고수하고 있는 프로그램 습관이다.
뭔가를 구현해야 하면
필요한 기능을 나열하기 시작한다.

(사용자입력을 받는다)  (입력값을 필요한 자료구조 형태로 담는다)
(넘겨받은 자료를 옵션에 따라 결과를 낸다)  (옵션을 설정한다) ...

등등을 막 나열하고 이걸 순서도로 그려가는 방식이랄까?
일종의 프로그램 흐름과 펑션(함수)기능 쪼개는 개념이라고 보면 될것 같다.


2. 객체지향적 구현 (Java)  -- 주체의 관점
지금까지 구현하면서 절차지향적인 방법으로 구현해도 아무 문제가 안되었다.
더 복잡한 구조라면 프로그램자체를 하나의 조각으로 보고 또 늘려가면 되었으니까... 

근데 이렇게 늘려가다보니 상호작용이랄까? 뭔가 이러저거 하려다보니 뭔가 복잡해지게 되었다.

"   A는 B에 뭔가를 주고 B에서 뭐가 일어나면 C에서 뭔가 취해줘야 하고
    이런걸 하다보니 복잡해 지기 시작하고 관리가 어려워 지기 시작했다  "

이제 기능에 치우쳐서 쪼개던 단위가 하나의 독립된 개체(객체?)를 하나의 단위로 봐야 하는게 아닐까 생각된다.



뭘 말하고 싶은데?

뭔가 말로 설명하기 힘들지만
쪼개진 기능이 모여 하나의 기능을 이룰때,
어떤 기능이 추가되어야 한다면
이 흐름을 완벽히 꿰뚫어야만 요구사항에 대한 추가/수정이 가능하다.

만약, 독립된 어떤 단위로 쪼개져있었다면 이런 위험성은 줄어들수 있다는것이다.

좀 과장된 비유를 하자면
저녁해먹으라고 냉장고를 열었는데

>> 채소, 고기, 곡식, 과일로 분리 된거랑                                                <-- 펑션단위
>> 미역국, 된장국, 밥, 김치, 장조림, 수박, 콩나물무침으로 분리된거랑       <-- 어떤 독립된 단위

어떤게 차려먹기 좋을까?

어떤 독립된 단위면 콩나물무침+밥+고추장을 더하면 비빔밥으로 될수 있는것처럼...
적당한 독립적인 기능을 하는게 무조건 쪼개는거보단 편리하겠지










+ Recent posts