자동로그인  
NS차트 배우기
 
작성일 : 03-04-28 21:45
NS-CHART 작성법 배우기 2 - Case구조
 글쓴이 : 한글닷컴
조회 : 8,203  

NS-CHART에 대해서 이제 조금 알겠지요?

NS-CHART는 매우 단순하기 짝이 없습니다. 그냥 네모난 박스를 그려놓고 조금의 변화만 주어가며 그리면 끝이니까요. 참 우습지요? 하지만, 세상에서 가장 간단한 진리는 수많은 시행착오와 검증을 거친 끝에야 만들어지는 법입니다. 매우 단순하고 우습기까지한 NS-CHART 역시, 긴 시간의 연구와 시행착오 끝에 얻어진 알고리즘의 산물이란 말이지요. 작성하는 방법이 매우 쉽다고, 뭐 이런게 차트냐고... 절대 우습게 보면 안된다는 것을 말씀드리고 싶습니다.^^

이번 시간에는 NS-CHART 기타 다른 형식의 표현방법에 대해서 알아보고자 합니다.


● case구조(주의! case구조는 등가비교임. 단, 실수로 등가비교는 할 수 없음)


FLOW CHART



NS-CHART

case구조란 case by case의 개념으로, 다음과 같은 경우에 쓰입니다.

  • 키가 130cm이하의 학생들은 A라는 코드를 부여한다.
  • 130cm~150cm인 학생들은 B라는 코드를 부여한다.
  • 150cm~180cm인 학생들은 C라는 코드를 부여한다.
  • 이것도 저것도 아닌 학생들은 별도의 코드를 부여하지 않는다.

바로 이런 경우. 플로우 차트와 NS-CHART 각각 위와같이 표현하게 되는 것입니다. 이 게 뭐냐구요? 좀더 확실한 예를 들어볼까요? 요즘 뜨거운 감자로 대두되고 있는 신용카드를 예를 들어보지요.

※ 각 카드사들은 요즘 고객별로 등급을 부여하여 현금서비스라든지 할부이자율을 조정하고 있습니다. 그 등급이라는 것이 여러 가지 조건들이 있겠지만, 우리는 간단하게 카드 사용실적을 기준으로 해서 고객별로 등급을 나누어 보도록 하겠습니다. 고객의 총 등급은 5개 등급입니다.

  • 지난 3달동안 한달평균 카드 사용금액이 0원 이상, 30만원 미만인 고객 : Green(할부 수수료 50%)
  • 지난 3달동안 한달평균 카드 사용금액이 30만원 이상, 100만원 미만인 고객 : Family(할부 수수료 40%)
  • 지난 3달동안 한달평균 카드 사용금액이 100만원 이상, 500만원 미만인 고객 : Hana Family(할부 수수료 30%)
  • 지난 3달동안 한달평균 카드 사용금액이 500만원 이상, 1000만원 미만인 고객 : VIP(할부 수수료 20%)
  • 지난 3달동안 한달평균 카드 사용금액이 1000만원 이상인 고객 : Hana VIP(할부 수수료 10%)

바로 이런 경우지요. 각 개인별로 지난 3달동안의 카드 사용실적을 합한 후에 3으로 나눠보면 한달 평균 사용금액이 나오게 되겠죠? 이때 그 값이 555만원이라고 한다면? 그 고객은 VIP고객입니다. 바로 이런 경우 위의 다중선택 구조를 써먹을 수 있습니다. 바로 다음과 같이 써먹을 수 있겠지요?

그런데 좀 특이한 부분이 있습니다. default라는 것이있지요? 여기에서 default는 절대로 ERROR CHECK를 위한 것이 아닙니다. 사용자가 실수로 또는 컴퓨터가 실수로 엉뚱한 코드값을 넣을 때가 있습니다. 바로 이 경우 예외의 값으로 들어올 때의 처리 방법을 기술 하는 부분인데요. 이 default값 처리에 있어서 많은 분들이 헛갈려 하십니다만 자주 사용해 보시면 사용법에 대해서 이해하실 수 있습니다.

또하나 별다른 것이 있지요? 바로 "등가비교는되는데 실수로 등가비교는 안됨"이라는 빨간 글씨..

우선 등가비교가 뭔지는 아시지요? 위의 Ns-CHART를 예로 들어 설명한다면, code값이 1이냐? 이런 상황을 등가비교라고 하지요.^^

그런데, 실수 비교가 안된다.. 이게 무슨 말일까요? 이 말을 이해하기 위해서는 컴퓨터언어를 어느정도 알아야 되는데요, 간단히 설명드리겠습니다.

여러분은 '1.0'과 '1.0'이 같다고 생각하십니까? 네? 아니라구요? 장난쌈치기 하는 것이죠? 쿠쿠. 다를리가 있나요. 같지요. 그러나... 사람은 같다고 바로 알아보지만, 컴퓨터는 엄연히 다른 수로 인식으로 합니다. 1과 1은 엄연히 같은 숫자입니다. 네, 1은 정수니까요. 그러나 1.0은 정수가 아닙니다. 실수라는 것인데요. 1.0은 1.00이 될 수도 있고, 1.0000000000000000이 될 수도 있습니다. 컴퓨터는 바로 이런 실수의 특징 때문에 1.0과 1.0을 같다고 보질 않는 것입니다. 즉, 위에 말했던 실수가 case의 코드값에 들어가면 안된다는 말이 이래서 나온 것입니다.

실수는 내부적으로 미소한 오차(floating point형태로 기억)가 있으므로 등가비교 자체가 안되는 것임.

또 등가비교만 된다는 말은... code값이 1이냐, 2냐, 3이냐, 4냐.. 또는 A냐, B냐, C냐... 이렇게 뭐와 같느냐... 라는 비교만 가능 할 뿐, code값이 1보다 작느냐, 아니면 3보다 크거나 같냐.. 이런 식의 대소비교는 쓰일 수가 없다는 것입니다. 쳇 말도 안된다구요? 네 말도 안되는 말이죠. 자기 하고 싶은대로 NS-CHART를 그린 후에 프로그램 코딩하면 끝이지 뭐 이래라 저래라 하느냐 하시겠죠? 그러나 대소비교를 이용한 case문을 나중에 그래도 C언어로 옮겨보시면 오류뜨고, 메모리 뻑나고... 아주 가관도 아닐 겁니다.^^

왜 등가비교만 되느냐.. case문에서 1이라는 코드 값은 숫자가 아닙니다. 문자일 뿐입니다. 숫자라면 대소비교가 가능하겠지요? 그러나 case문은 문자코드건 숫자코드건 모두 정수값으로 바꿔서 등가여부만 비교하게 되므로 전혀 대소비교를 이루어낼 수가 없는 것입니다.

Copyright ⓒ Haangul.com All rights reserved