5. 헤더 파일 분리와 다중 소스 파일 관리
1) 다중 소스 파일
- 다중 소스 파일은 하나의 C 프로젝트에서 여러 개의 .c 파일을 나누어 관리하는 방식이다.
- 이때 각 .c 파일은 하나의 모듈(module)로 취급한다.
- 각 모듈은 역할 단위로 코드가 분리되어, 유지 보수와 재사용성이 향상된다.
✅ 다중 소스 파일 구조는 실제 개발 현장에서 표준적인 관리 방식이다.
2) 헤더 파일 분리의 기본 원칙
- 각 소스 파일(.c)에 대한 함수 선언(원형)은 별도의 헤더 파일(.h)에 작성한다.
- 이 헤더 파일은 해당 기능을 사용하는 다른 소스 파일에서 #include 하여 연결된다.
⭕ 예를 들어:
| 파일명 | 역할 |
| math_utils.c | 실제 계산 기능 구현 |
| math_utils.h | math_utils.c의 함수 원형 정의 |
| main.c | 프로그램 실행 시작점 (main 함수) |
3) Include Guard는 필수
- 헤더 파일에는 반드시 include guard 또는 #pragma once를 사용하여 중복 포함을 방지한다.
- 예시:
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
// 함수 선언들
#endif
4) 디렉터리 구조 예시
/project
├── main.c
├── math_utils.c
├── math_utils.h
✳️ 이처럼 소스 파일과 헤더 파일을 1:1로 관리하는 것이 일반적이다.
5) 컴파일 방법
👉 터미널이나 명령줄에서 컴파일할 때는 모든 .c 파일을 함께 컴파일해야 한다.
gcc main.c math_utils.c -o program
✅ -o program은 실행 파일 이름을 지정한다.
💻 예제 코드: 다중 소스 파일 구성
📁 math_utils.h (헤더 파일)
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
// 함수 원형(선언)만 포함
int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
float divide(int a, int b);
#endif // MATH_UTILS_H
📁 math_utils.c (함수 구현)
#include "math_utils.h"
// 두 정수의 합을 반환
int add(int a, int b) {
return a + b;
}
// 두 정수의 차를 반환
int subtract(int a, int b) {
return a - b;
}
// 두 정수의 곱을 반환
int multiply(int a, int b) {
return a * b;
}
// 두 정수의 나눗셈 결과(float형)를 반환
float divide(int a, int b) {
if (b == 0) {
return 0.0f; // ⚠️ 0으로 나누는 경우 0.0 반환
}
return (float)a / b;
}
📁 main.c (프로그램 진입점)
#include <stdio.h>
#include "math_utils.h" // 모듈 헤더 포함
int main() {
int a = 10, b = 2;
printf("덧셈: %d\n", add(a, b));
printf("뺄셈: %d\n", subtract(a, b));
printf("곱셈: %d\n", multiply(a, b));
printf("나눗셈: %.2f\n", divide(a, b));
return 0;
}
🖨️ 실행 결과
덧셈: 12
뺄셈: 8
곱셈: 20
나눗셈: 5.00
✅ 마무리 정리
1️⃣ 다중 소스 파일은 기능을 나누어 구조화할 수 있는 효율적인 관리 방식이다.
2️⃣ 각 소스 파일에는 헤더 파일을 연결하고, 함수 선언을 분리하여 모듈화한다.
3️⃣ 헤더 파일에는 include guard를 사용하여 중복 포함을 방지한다.
4️⃣ 컴파일 시에는 모든 .c 파일을 한 번에 컴파일해야 한다.
5️⃣ 이 구조를 통해 유지 보수성과 확장성이 크게 향상된다.
'Language > C' 카테고리의 다른 글
| 📌 Chapter 18 - 정적 라이브러리와 동적 라이브러리 활용 (0) | 2025.06.26 |
|---|---|
| 📌 Chapter 17 - 선행처리기와 다중 소스 파일 - Makefile (1) | 2025.06.24 |
| 📌 Chapter 17 - 선행처리기와 다중 소스 파일 - Include Guard (0) | 2025.06.24 |
| 📌 Chapter 17 - 선행처리기와 다중 소스 파일 - 조건부 컴파일 (0) | 2025.06.24 |
| 📌 Chapter 17 - 선행처리기와 다중 소스 파일 - 매크로 (0) | 2025.06.24 |