C언어 8장: 함수(Function)의 이해와 활용 – 체계적인 프로그래밍의 시작
1. 함수란 무엇인가?
함수(Function)는 프로그래밍에서 입력값을 받아 특정 작업을 수행하고 결과를 반환하는 코드 블록입니다. 복잡한 프로그램을 여러 개의 작은 기능 단위로 나누어 관리할 수 있어, 코드의 재사용성과 가독성을 크게 높여줍니다.
함수의 주요 특징은 다음과 같습니다:
- 서로 구별되는 이름으로 정의되어 특정 작업을 수행한다.
- 입력(매개변수)을 받아 처리하며 결과를 반환한다.
- 코드 중복을 줄이고, 체계적이고 효율적인 개발을 돕는다.
2. 함수의 구조와 구성 요소
함수는 크게 함수 헤더(Function Header)
와 함수 몸체(Function Body)
로 구성됩니다.
- 함수 헤더 : 반환 타입, 함수 이름, 매개변수 선언으로 이루어집니다.
예)int sum(int a, int b)
- 함수 몸체 : 중괄호 내에 실제 실행될 명령문들이 위치합니다.
함수의 원형(Prototype)은 함수 정의 전에 선언하는 형태로, 함수 이름, 반환 타입, 매개변수 목록이 포함되며 끝에 세미콜론(;)이 붙습니다.
원형 선언의 장점은:
- 코드 가독성 향상
- 함수 사용 예시 제공
- 컴파일러 오류 방지
3. 함수 호출과 매개변수, 인수
함수는 호출 시 인수(Arguments)를 전달받아 실행됩니다. 인수는 함수가 실제로 받는 값이며, 매개변수(Parameter)는 함수 정의 시 함수 몸체로 값을 전달하기 위한 변수입니다.
함수는 오직 하나의 반환값(Return value)만 가질 수 있습니다.
int max(int x, int y) {
if (x > y) return x;
else return y;
}
위 예제에서 함수 max
는 두 개의 매개변수 x, y
를 받아 큰 값을 반환합니다.
4. 변수의 범위(Scope) – 전역변수와 지역변수
변수는 선언된 위치에 따라 전역변수(Global Variable)와 지역변수(Local Variable)로 나뉩니다.
- 전역변수 : 함수 외부에 선언되어 모든 함수에서 사용 가능하며, 프로그램 시작 시 자동으로 0 또는 NULL로 초기화됩니다.
- 지역변수 : 함수 내부에서 선언되어 해당 함수 내에서만 유효하며, 함수가 종료되면 소멸됩니다.
만약 같은 이름의 전역변수와 지역변수가 있다면, 지역변수가 우선권을 가집니다.
5. 정적 변수(static)와 변수 생명 주기
static
키워드가 붙은 지역변수는 일반 지역변수와 달리 함수가 종료되어도 값이 유지됩니다. 즉, 정적 변수(static variable)는 전역변수처럼 동작하지만 함수 내부에 숨겨진 형태입니다.
void func() {
static int count = 0; // 최초 1회만 초기화
count++;
printf("func 호출 횟수: %d\n", count);
}
위 예제에서 count
는 func가 여러 번 호출되어도 값을 유지하며 호출 횟수를 셉니다.
6. 함수 사용 시 유용한 헤더 파일
함수 중 Sleep()
과 system()
함수는 별도의 헤더 파일을 포함해야 사용 가능합니다.
#include <windows.h>
: Sleep(ms) 함수를 사용하기 위한 헤더 (윈도우 전용)#include <stdlib.h>
: system() 함수를 사용하기 위한 헤더
예를 들어, Sleep(1000);
은 프로그램 실행을 1초 동안 멈춥니다.
7. 함수의 장점과 프로그래밍에서의 중요성
함수를 사용하면 다음과 같은 장점을 얻습니다:
- 코드 중복 방지로 프로그램 크기와 유지보수 비용 감소
- 재사용 가능한 모듈 단위로 코드를 관리해 체계적인 개발 가능
- 함수 단위 테스트로 오류를 조기에 발견 가능
- 팀 단위 개발 시 역할 분담과 협업이 쉬워짐
"함수는 프로그래밍의 기본 단위이자, 복잡한 문제를 작은 문제로 나누어 해결하는 핵심 도구입니다."
'과목공부 > C언어' 카테고리의 다른 글
[C언어] C언어 포인터 완전 정복: 함수 포인터와 다양한 포인터 활용법 (0) | 2025.06.14 |
---|---|
[C언어] C언어 포인터 완벽 정리와 핵심 개념 (0) | 2025.06.14 |
[C언어] C언어 배열 완전 정복 – 1차원과 2차원 배열의 이해와 활용 (0) | 2025.06.14 |
[C언어] C언어 반복문 완전 정복 – While문, Do-while문, For문과 제어문 (0) | 2025.06.14 |
[C언어] 조건문과 제어문 완벽 이해하기 - If, Switch, Goto (0) | 2025.06.14 |