소프트웨어/알아두면 좋은 것들

프로그래밍에서 숫자가 가장 쉬운 데이터다? 경우의 수를 잘 생각하자.

리습 2013. 6. 1. 13:50

프로그램을 처음 접할 때 일반적으로 첫 연산으로 간단한 숫자의 덧셈과 뺄셈을 하는 경우가 많습니다. 그것 때문인지 프로그래밍을 처음 접하시는 분들은 숫자를 매우 쉽게 생각하시더군요. 이해하기가 쉽기 때문이죠. 하지만 잊지 말아야 할것이 하나 있습니다.  우리는 숫자를 사용하면서 "언급하지 않은 굉장히 많은 약속을 한다는 것" 입니다.

 


<숫자를 사용하는데 어떤 약속을?>

 

  1 + 1.00 = ?!?

 

 실제로  숫자 데이터를 처리하는 경우 단순하게 1 + 1 = 2 일것이다. 라고 많이들 예상합니다. 네 맞습니다. ' 통상적인 경우' 에는 맞죠. 하지만 1 + 1.00 은 과연 2 일까요? 2.00 일까요? 여기서 고민은 시작됩니다. 유효숫자가 있는 숫자와 그렇지 않은 숫자의 덧셈은 실제 프로그래밍 중에도 매우 발생합니다. 이런 충돌을 피하기 위해서 프로그램 설계단계부터 변수의 종류 부터 철저하게 설계하지만 그래도 발생하는 상황이죠. 물론 학습하는 과정에서는 단순하게 2일꺼야 하고 넘어갈수도 있습니다. 하지만? 어떤 프로그램이 비행기를 이륙시키는 프로그램인데 중간에 1 + 1.00 이 계산되면서 원하지 않는( 예상할 수 없는 ) 치명적 에러가 발생할수도 있다는 것이지요. 항상 변수의 형식을 잘 생각해야합니다.

 

  900 + 300 = ?!?

 

 프로그래밍으로 900 + 300을 계산할 경우 항상 1200이 나올까요?  정답은 아닙니다. 변수의 공간을 1바이트 짜리로 만들었다면 어떻게 될까요? 예측할 수 없는 결과값이 나오게 될것입니다. 메모리공간을 넘겨서 외부 공간에 잘못된 기록을 하게 될수도 있죠. 항상 변수의 크기도 염두에 둬야합니다.

 

 

  300 - 900 = ?!?

 

 

 300 - 900 의 값은 -600일까요? 맞을수도 있지만 항상은 아닙니다. 변수의 범위를 0 ~ 1023 로 두었다면 어떻게 될까요? 음수의 표현은 가능할까요? 또 예를 들어 허수 의 표현이 필요하다고 할때 허수는 어떻게 표현을 해야할까요? 허수의 표현 방식은 또 어떻게 만들어야 할까요? 

 

 처음 C언어를 공부할때야 int를 사용해서 손쉽게 정수형을 표현하곤 하지만 실제 프로그램을 만들경우엔 그렇지 못한경우가 더 많습니다. 애초에 1~ 100까지 채울 변수의 공간을 굉장히 큰 int 라는 변수의 공간을 사용하는 것 부터 잘못되었다고 봐야죠.  간단한 계산을위해서 손쉬운 프로그램을 만들때야 이렇게 까지 고민할 필요가 없지만 간단한 숫자를 사용하면서도 이 숫자가 어떻게 사용될것인지 예측하고 예상하면서 사용하는 습관을 들이는 것이 좋습니다.