|
제가 얼마전에 N-S Chart를 배웠는데요 참 좋은거 같습니다.
그후로 N-S Chart의 신봉자(?)가 되었습니다.
그래서 N-S Chart를 소개할려구요.
결국 FlowChart보다 N-S Chart가 좋다라는 말이 될텐데요
준회님이 말씀하실려는게 '무슨Chart'라는 도구가 아니라 '로직성립'이라는걸
이해하고 있으니까 오해없으시길 바랍니다.
단지, 제가 생각하기에 더 좋은게 있고 그걸 말씀드리고(다른분께도) 모두같이
생각해보면 좋을꺼 같아서요.
역시나 변명아닌 변명이 길었습니다...
먼저 FlowChart의 단점을 말씀드리겠습니다.
(보통 알고있는 '순서도' 맞죠? 혹시나 이런종류의 대표명사가 아닌가 해서요...)
일단 설명 들은 3가지의 단점이 모두 FlowChart의 '제어선'때문입니다.
1. 조건문이 양자택일 구조만 되야하는데 그 이상 가능하다.
마름모(조건분기)에서 두선만 나와야 하는데 3선 이상 나올수 있습니다.
결국 3선 이상일경우 소스코드로 '그대로' 옮길수가 없게 되죠.
이경우에 FlowChart에서는 로직상 이상이 없습니다.
2. 분기가 가능하다.
goto,break를 말하는건데요
FlowChart는 goto문이 아주 자연스럽게 쓰여질수가 있습니다.
로직성립에 있어서 goto문은 좋지 않다고 합니다.(전 아직 실감을 못하고 있지만...)
3. 반복조건문 위로 분기가 가능하다.
말이 좀 그런데요...
설명을 하자면
값을 하나 읽습니다.
그리고 조건을 판단합니다.
거짓이면 빠져나가고
참이면 실행문을 실행하고
다시 읽고 조건을 판단합니다.
이럴경우에 FlowChart를 보면
네모(읽기)
마름모(조건판단)
네모(참일경우 실행문)
거짓이면 네모(참일경우 실행문)을 건너서 내려가고
참이면 네모(참일경우 실행문)을 실행하고 위의 네모(읽기)로 가서
읽고 조건판단을 또다시 합니다.
이건 소스코드로 표현이 불가능합니다.
FlowChart에서는 로직상 이상이 없구요.
read;
while()
{
실행문;
read;
}
이렇게 되야하는데(Two read 방식이라고 하는군요) 이건 FlowChart를 '그대로' 옮긴것이 아닌게 되죠.
종합해볼때 가장 큰 문제는 FlowChart에서 논리적으로 가능한 것이 소스코드로 '그대로' 표현이 불가능하게 되거나 분기문으로 인해 코드가 엉키게(전 제가쓴 goto는 제 머리에선 안 엉키던데...한번 써봤는데 넘 간단해서 그런지...) 됩니다.
모두다 '제어선'때문이라고 합니다.
물론 위의 세가지를 염두해 두고 FlowChart를 작성하면 문제는 없겠습니다.
하지만 염두해 두고 한다는게 어려운거 같습니다.
C언어를 안다면 Two read방식이 머리에 있어서 한번더 네모(읽기)를 표현하고 반복조건문 위로 분기를 안하겠지만 약간의 문제가 있습니다.
어떤 차트든 차트는 언어에 종속적이지 않고 사람의 생각을 그대로 표현 가능해야한다고 합니다.
이말은 차트작성시는 로직에만 신경쓴다는 것이죠.
배열의 첨자도 1부터 하는게 모든 차트의 문법이구요.
C가 워낙 널리 쓰이다 보니 0부터 하는게 통용되는것이라고 합니다.
선생님께서도 설명은 1부터 해야 된다고 하셨지만 제가 개인적으로 물어보니 본인도 0으로 하신다고 합니다^^
이게 바로 로직부터 공부하지 않고 언어부터 접하게되어 생기는 문제인거 같습니다.
저는 언어부터 접했지만 머리가 나쁜나머지 배열을 1부터 생각하면 훨씬 쉽게 로직이 세워집니다.
아마 언어를 먼저 접하지 않고 로직부터 공부한다면 이것이 당연하게 되겠지요.
말이 길어졌네요...
근데 FlowChart는 언어에 종속적이지 않기때문에 문제입니다. 아이러니하죠...
이걸 해결하는것이 생각을 그대로 표현함에 있어서 무의식중에 언어에 종속적인것이 N-S Chart라고
할수 있습니다.
물론 더 좋은게 있을수 있고 또 만들어 지겠지요.
그래서 N-S Chart는 어떤가...
(N-S Chart가 어떻게 생겼는지를 표현하기가 좀 어렵네요...번거러우시더라도 웹에서 찾아보셔야겠습니다. N-S Chart를 소개할려는게 목적인데...에구...)
일단 N-S Chart는 '제어선'이 없습니다.
제어선을 따라갈 필요가 없습니다.
반복구문이 한눈에 들어옵니다.
개인적으로 FlowChart에서와 가장 큰 차이점이 반복구문이 한눈에 훨씬 잘 들어오는것입니다.
그럼 위의 모든 문제를 해결하게 됩니다.
근데 문제는 그렇게 됨으로써 goto문을 표현할 방법이 없습니다.
이게 제가 같이 생각해봤으면 하는 부분입니다.
나시와 슈나이더(?).. 이름은 확실치는 않지만 N과 S로 시작하는 두사람이 이걸 만들고
"이세상의 모든 FlowChart를 가져와봐라 우리가 모두 N-S Chart로 표현해 보이겠다"
라고 말했다는데 그 당시 테스트한 모든 것을 바꾸었다고 합니다.
이말은 goto문 없이 수행되는 프로그램이 되었다는 얘깁니다.
전 goto문을 안쓰지만 안써야만 된다는 쪽은 아니기 때문에 좀 생각중입니다.
학교에서 '어셈블리어'강의 레포트를 할때 FlowChart를 먼저 작성하고 코딩을 했을때
FlowChart의 엄청난 위력을 실감하고 앞으로 FlowChart를 꼭 작성하고 코딩을 해야지 했습니다.
그후로 한번도 한적 없지만...
근데 제가 문제없는 FlowChart와 N-S Chart를 비교해보니까 N-S Chart가 월등히 이해하기 쉬웠습니다.
개인적인 시각차이라고 하기에는 너무나도 차이가 났습니다.
제어선을 따라가는것을 모두다 힘들어 했는데 그게 해결이 되었기 때문입니다.
같이 배우는 사람들이 모두 동의하는 입장이구요.
제 생각엔 FlowChart는 적어도 어셈블리어에는 딱이구요
프로그램의 전체적인 흐름을 표현하는데 적합하지 않나 싶습니다.
그리고 FlowChart는 함수 호출을 어떻게 표현을 하는지, 표현법이 있는지 모릅니다만
N-S Chart는 함수를 호출하는 표현이 없습니다.
질문을 하니까 또다른 N-S Chart를 가지고 한다는데 더이상 자세하게 물어보지 못했습니다.
요지는 N-S Chart는 하나의 함수단위 프로그램을 표현하기에 가장 적합하다는 것이었습니다.
"디버깅 C++"라는 책에 IPO 다이어그램이라는 N-S Chart와 아주 유사한 것이 있는데 그건 함수 호출이 있더군요.
IPO 다이어그램을 먼저 봤었는데 그땐 도무지 몰랐는데 이제 읽으면 알 수있을거 같습니다.
N-S Chart를 쓸지 IPO 다이어그램을 쓸지 짬뽕해서 좋은거만 골라쓸지(그게 가능하다면...)
모르겠습니다만 일단 다시 읽어볼생각입니다.
IPO 다이어그램도 시간나시면 참고해보세요.
어떤 종류의 Chart이건 Chart작성 안하시고 코딩하시는 분(특히 공부중이신분...) 꼭 Chart작성해보세요 확실히 다릅니다.
범포럼적으로 N-S Chart 장려운동을 벌였으면 하는게 제 생각입니다^^
산만한 글 읽어주셔서 감사합니다.
p.s
함수의 소스라인이 맥시멈 30라인 정도(최악일경우 50라인정도)이상이 되면
로직을 한개 이상의 함수로 분리하거나 로직 자체를 다시 생각해보라고 합니다.
변수선언, 주석 같은건 빼구 핵심 로직만요...
|