반응형
10장: 프로그램 조직화 (Program Organization)
- 헤더 파일: 함수 선언, 데이터 구조 정의.
- 소스 파일: 함수 구현.
- 컴파일 및 링크: 여러 파일을 개별적으로 컴파일한 뒤 실행 파일로 결합.
- Makefile: 대규모 프로젝트의 빌드 프로세스를 효율적으로 관리.
10.1 프로그램의 구성
C 프로그램은 코드의 모듈화와 재사용성을 위해 여러 파일로 분리하여 작성합니다.
프로그램의 구성 요소:
- 헤더 파일 (.h): 함수와 상수의 선언부.
- 소스 파일 (.c): 함수의 구현부.
- 링킹 (Linking): 여러 개의 .c 파일을 연결하여 실행 파일 생성.
10.2 헤더 파일
1. 헤더 파일의 역할
- 함수 프로토타입, 매크로, 상수, 데이터 타입 정의.
- 여러 파일 간 공용 인터페이스 제공.
- 중복 정의 방지 (#ifndef, #define).
2. 헤더 파일 작성 예제
#ifndef HEADER_H // 중복 포함 방지
#define HEADER_H
void printMessage(); // 함수 프로토타입 선언
#endif
10.3 소스 파일
1. 소스 파일의 역할
- 함수의 구현부 포함.
- 헤더 파일을 통해 다른 소스 파일과 연결.
2. 소스 파일 작성 예제
#include <stdio.h>
#include "header.h"
void printMessage() {
printf("Hello, C Programming!\n");
}
10.4 헤더와 소스 파일의 연결
1. 파일 구성 예제
project/
├── main.c
├── module.c
└── header.h
- header.h: 함수 선언
- module.c: 함수 구현
- main.c: 프로그램 실행 진입점
2. main.c 예제
#include "header.h"
int main(void) {
printMessage(); // module.c에서 구현된 함수 호출
return 0;
}
3. 컴파일 및 실행
gcc -c main.c # main.o 생성
gcc -c module.c # module.o 생성
gcc -o program main.o module.o # 실행 파일 생성
./program
출력 결과:
Hello, C Programming!
10.5 다중 파일 프로그램의 필요성
- 모듈화
- 파일별로 기능을 분리하여 유지보수 용이.
- 예: 입력 처리, 계산, 출력 등을 각각의 파일로 분리.
- 재사용성
- 공통 로직을 별도 파일로 만들어 여러 프로그램에서 재사용 가능.
- 작업 분담
- 팀 작업 시 코드 분리로 협업 효율성 증가.
10.6 Makefile
1. Makefile이란?
- 여러 파일로 구성된 프로그램의 컴파일 자동화를 지원하는 도구.
- 컴파일 명령과 의존성을 관리.
2. Makefile 예제
# 컴파일러 설정
CC = gcc
CFLAGS = -Wall -g
# 대상 파일
TARGET = program
OBJECTS = main.o module.o
# 기본 빌드
$(TARGET): $(OBJECTS)
$(CC) -o $(TARGET) $(OBJECTS)
# 개별 파일 컴파일
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 클린업
clean:
rm -f $(OBJECTS) $(TARGET)
3. Makefile 사용법
make # 프로그램 빌드
make clean # 중간 파일 삭제
10.7 프로그램 설계 원칙
1. 모듈화 원칙
- 하나의 파일은 하나의 역할만 담당.
- 예: 파일 입출력 → fileio.c, 수학 연산 → math.c
2. 정보 은닉
- 구현 세부 사항은 소스 파일에 포함하고, 헤더 파일은 인터페이스만 제공.
3. 의존성 최소화
- 파일 간 의존성을 줄여 유지보수성 향상.
10.8 심화 예제: 계산기 프로그램
1. 프로젝트 구조
calculator/
├── main.c
├── calculator.c
├── calculator.h
2. 헤더 파일 (calculator.h)
#ifndef CALCULATOR_H
#define CALCULATOR_H
int add(int, int);
int subtract(int, int);
#endif
3. 소스 파일 (calculator.c)
#include "calculator.h"
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
4. 메인 파일 (main.c)
#include <stdio.h>
#include "calculator.h"
int main(void) {
int a = 10, b = 5;
printf("더하기: %d\n", add(a, b));
printf("빼기: %d\n", subtract(a, b));
return 0;
}
5. 컴파일
gcc -c main.c
gcc -c calculator.c
gcc -o calculator main.o calculator.o
./calculator
출력 결과:
더하기: 15
빼기: 5
반응형
'Computer Science > C 언어' 카테고리의 다른 글
[C #12] 포인터 (Pointers) (1) | 2024.12.10 |
---|---|
[C# 11] Makefile 분석 (0) | 2024.12.09 |
[C #9] 함수 (Functions) (3) | 2024.12.07 |
[C #8] 배열 (Arrays) (1) | 2024.12.06 |
[C #7] 기본 데이터 타입 (Basic Types) (1) | 2024.12.05 |