지금까지 여러분이 작성한 프로그램들은 비교적 간단한 것으로, 한 개의 main() 함수로만 구성되었다. 그러나 문제가 약간만 복잡해져도 main() 함수는 상응해서 크고 복잡해질 것이고, 이 함수를 혼자서 작성하고 수정, 보완하는데는 상당한 어려움이 따를 것이다. 사실, 여러분이 유용하게 사용하고 있는 마이크로소프트사의 오피스와 같은 상용 응용 소프트웨어는 수십명, 혹은 수백명이 동원되어 개발된 것이다.

여러분의 컴퓨터를 생각해보자. 컴퓨터 본체 안을 들여다보면, 여러 개의 부품들로 구성되는 것을 알 수 있다: CPU, 메모리, 보조 메모리, 그래픽 카드, 사운드 카드 등. 여러분은 이러한 부품들을 조립하여 한 대의 컴퓨터를 만들 수도 있다. 또한, 여러분은 부품을 교환하든지 추가하여 컴퓨터의 성능을 손쉽게 높일 수 있다. 가령, CPU를 교환한다든지, 메모리나 보조 메모리를 교환 혹은 추가하여 컴퓨터의 성능을 높인다. 또한, 컴퓨터에 문제점이 발생한 경우에도 간단히 손상된 부품만을 교환함으로써 그 문제점을 해결할 수도 있다.

 

컴퓨터의 성능향상이나 문제점을 간단히 부품만을 교체함으로써 해결할 수 있는데, 이것은 컴퓨터가 한 덩어리로 구성되어 있지 않고, 여러 개의 부품들로 구성되어 있기 때문에 가능한 것이다.

만약에, 컴퓨터가 부품들이 아닌 한 덩어리로 구성되어 있다면, 컴퓨터의 문제점을 해결하거나 성능을 향상시키는 작업은 전문가가 아니고서는 엄두도 낼 수 없을 것이다. 또한, 컴퓨터를 통째로 버리고 새로 교체해야 하는 경우가 빈번히 발생할 것이다.

 

부품은 보통 한 가지의 기능을 수행하고, 외부와의 인터페이스를 갖는 구성 요소로서 정의할 수 있다. 외부와의 인터페이스는 입력과 출력으로 구분된다. 가령, CPU의 기능은 명령어를 처리하는 것이고, 그 외부와의 인터페이스로 입력은 명령어와 데이터이고 출력은 명령어 처리 결과이다.

다른 예제로서, 메모리의 부품은 다음과 같이 정의될 수 있다. 메모리의 기능은 데이터를 저장하거나 저장되어 있는 데이터를 외부로 송출하는 것이다. 외부와의 인터페이스에서 입력이 읽기(Read) 신호와 주소이면, 그 출력은 전달된 주소에 저장된 데이터이다. 만약에, 입력이 쓰기(Write) 신호, 주소, 데이터이면, 그 출력은 없다.

부품들은 외부와의 인터페이스를 통해서 서로 연결될 수 있다. 다음은 CPU와 메모리의 두 부품이 연결되어 동작하는 과정을 보여준다.


즉, CPU는 읽기 신호와 주소를 메모리에 보내면, 메모리는 그 주소에 저장되어 있는 명령어나 데이터를 CPU에 전달하고, CPU는 명령어를 적절히 처리하고 그 결과를 메모리에 보내어 저장시킨다.

이와 같은 방식으로 부품들을 서로 연결하여 컴퓨터를 조립할 수 있다.


프로그램 작성도 컴퓨터의 조립과 마찬가지로 생각할 수 있다. 복잡하고 규모가 큰 프로그램을 한 덩어리로 작성하는 것은 매우 복잡하고, 어렵다. 이렇게 개발된 프로그램은 오류 발생시 진단, 수정하는 것이 어렵고, 새로운 기능을 추가하는 것도 쉽지 않다.

일반적으로 규모가 크고 복잡한 프로그램은 더 작은 크기의 여러 개의 모듈로 나누어서 작성하고 이들을 통합하여 전체 프로그램을 완성하는 방식으로 개발한다. 여기서 모듈(module)은 프로그램에서 한 가지의 논리적 기능을 수행하는 프로그램의 일부분으로, 컴퓨터에서 한 개의 부품에 해당된다고 볼 수 있다. 즉, 모듈은 기능과 외부 인터페이스로 입력과 출력으로 정의된다.


모듈은 C 프로그램에서 데이터이다. 이 데이터를 조작하는데 사용되는 함수들의 집합으로, C언어의 함수는 한 가지의 기능을 수행하며, 외부 인터페이스로 입력과 출력을 갖는다. 즉, C 함수는 입력 데이터를 사용하여 명세된 기능을 수행하며, 그 수행 결과를 출력으로 생성한다.


두 개의 정수를 입력받아서, 큰 값을 결정하여 출력하는 함수를 생각해보자. 이 함수는 다음과 같이 정의될 수 있다:


3개의 정수를 입력받아서 가장 큰 값을 결정하는 문제를 어떻게 해결할 것인가? 이 문제는 앞에서 정의된 max 함수를 사용하면 쉽게 해결될 수 있다.


이와 같이 max 함수를 연결하여 더 큰 문제를 해결할 수 있음을 알 수 있다. 또한, 위의 예제처럼 동일한 함수를 여러 번 사용할 수 있다.

다음은 주어진 크고 복잡한 문제로부터 C 프로그램을 작성하는 과정을 보여준다. 이 경우 C 프로그램은 main() 함수를 포함하여 여러 개의 함수들로 구성된다.

C 프로그램에서 함수는 미리 정의되어 있거나 그렇지 않을 수 있다. 미리 정의된 함수의 예는 printf()나 scanf()처럼 여러분이 이미 사용해 오고 있는 입, 출력 함수들이다. 여러분은 필요에 따라 이러한 함수들을 불러서 사용할 수 있다. 사용자가 필요로 하는 함수가 미리 정의되어 있지 않은 경우에는, 사용자가 직접 정의해야 한다.

9주차 강의에서는 먼저, 미리 정의된 함수들 중에서 유용하게 사용할 수 있는 수학 라이브러리 함수에 대해서 알아보고, 다음에 사용자가 함수를 직접 정의해서 사용하는 방법에 대해서 알아본다.

 




top으로... 다음페이지로.. home으로..