Skip to main content

함수 기초

함수의 개념과 종류

**Function(함수)**는 특정 작업을 수행하도록 설계된 독립적인 프로그램 단위이다. 입력을 받아 정해진 처리를 한 후 결과를 출력하는 블랙박스(blackbox)와 같은 개념으로 이해할 수 있다.

함수는 크게 두 종류로 나뉜다.

  • System-defined Function(시스템 정의 함수): printf()와 같이 개발 도구에서 미리 만들어 제공하는 함수이다. 라이브러리 함수라고도 부른다.
  • User-defined Function(사용자 정의 함수): 프로그래머가 필요에 따라 직접 만들어서 사용하는 함수이다.

C 프로그램은 결국 이러한 User-defined FunctionSystem-defined Function의 집합체라고 할 수 있다.

프로그램에서의 함수 활용

C 프로그램은 하나 이상의 함수로 구성되며, main()이라는 특별한 함수에서 실행이 시작된다. main() 함수를 포함한 모든 함수는 직접 또는 간접적으로 main()으로부터 호출(call)되어 실행된다.

함수를 사용하는 과정은 크게 세 단계로 나뉜다.

  1. Function Declaration(함수 선언) 또는 Function Prototype(함수 원형): 컴파일러에게 앞으로 사용할 함수의 이름, 반환값 자료형, 매개변수(인자)의 자료형을 미리 알려주는 단계이다.
  2. Function Call(함수 호출): 선언되거나 정의된 함수를 실제로 실행시키는 구문이다.
  3. Function Definition(함수 정의): 함수가 수행할 실제 작업 내용을 코드로 구현하는 부분이다.

함수의 구조

함수 원형 (Function Prototype)

함수를 호출하기 전에 해당 함수의 정보를 컴파일러에게 알리는 역할을 한다. 변수를 사용하기 전에 선언하는 것과 같은 의미이다.

문법: 반환값_자료형 함수이름(인자_목록);

long sum(int n);
long addtwo(int m, int n);

함수 정의 (Function Definition)

함수의 실제 동작을 구현하는 부분으로, **Header(헤더)**와 **Body(몸체)**로 구성된다.

  • Header: 함수의 반환값 자료형, 함수 이름, 그리고 매개변수 목록으로 구성된다. 원형과 달리 끝에 세미콜론이 붙지 않는다.
  • Body: 중괄호 {}로 둘러싸인 부분으로, 함수가 수행할 작업에 대한 코드를 포함한다.
// 함수 헤더
long sum(int n)
{ // 함수 몸체 시작
long result = 0;
int i;
for (i = 1; i <= n; i++) {
result += i;
}
return result; // 결과값 반환
} // 함수 몸체 끝

반환 값과 인자

  • 반환 값: 함수가 작업을 마친 후 호출한 곳으로 돌려주는 결과값이다. return 키워드를 사용하며, 하나의 함수는 하나의 반환 값만 가질 수 있다. 반환 값이 없는 함수는 반환값 자료형으로 void를 사용한다.
  • 인자 (매개변수): 함수를 호출할 때 함수에 필요한 값을 전달하는 통로이다. 인자가 없는 함수는 인자 목록에 void를 기술한다.
    • Formal Parameter(형식인자): 함수를 정의할 때 헤더에 기술되는 매개변수이다.
    • Actual Parameter(실인자): 함수를 호출할 때 전달하는 실제 값이나 변수이다. Actual ParameterFormal Parameter의 순서, 개수, 자료형과 일치해야 한다.

프로그램 구조와 함수 배치

프로그램 내에서 함수를 배치하는 방식은 크게 두 가지가 있다.

  1. 함수 원형 사용: 파일 상단에 Function Prototype들을 먼저 선언하고, main() 함수를 정의한 뒤, 파일 하단에 각 함수의 실제 Function Definition을 배치하는 방식이다.
  2. 함수 정의 우선: main() 함수보다 먼저 다른 모든 함수의 Function Definition을 배치하는 방식이다. 이 경우, main()이 함수를 호출하기 전에 컴파일러가 이미 함수의 정의를 알고 있으므로 별도의 원형 선언이 필요 없다.

헤더 파일과 라이브러리 함수

시스템 라이브러리 함수의 Function Prototype들은 기능별로 여러 헤더 파일에 나뉘어 정의되어 있다. 예를 들어, printf() 함수의 원형은 stdio.h에, 수학 관련 함수들의 원형은 math.h에 포함되어 있다.

헤더 파일주요 기능
stdio.h표준 입출력 작업 (printf, scanf)
math.h수학 관련 작업 (sqrt, pow, ceil)
string.h문자열 처리 작업
time.h시간 관련 작업
stdlib.h텍스트-숫자 변환 등 여러 유틸리티 함수
ctype.h문자 관련 작업

함수 사용의 장점

함수를 사용하면 다음과 같은 장점이 있다.

  • 모듈화: 큰 문제를 여러 개의 작은 문제(함수)로 나누어 해결할 수 있다.
  • 가독성: 프로그램이 함수 단위로 구성되어 읽고 이해하기 쉬워진다.
  • 코드 중복 최소화: 정의된 함수는 여러 번 호출이 가능하여 소스 코드의 양을 줄일 수 있다.
  • 재사용성: 한 번 잘 구현된 함수는 다른 프로그램에서도 쉽게 재사용이 가능하다.

이처럼 함수를 적절히 사용하여 잘 구성된 프로그램을 Modular Program(모듈화 프로그램) 또는 **Structured Program(구조화된 프로그램)**이라고 한다.