0Pricing
C Academy · 강의

헤더와 소스 파일

선언과 코드를 분리해 보세요.

헤더와 소스 파일은(는) CoddyKit의 무료 C Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

코드를 파일로 나누는 이유

C 프로그램이 커지면 모든 내용을 하나의 .c 파일에 두기가 읽기 어렵고 컴파일도 느려집니다.

C에서는 프로젝트를 여러 파일로 나눌 수 있으며, 각 파일이 하나의 관심사를 담당합니다. 이렇게 하면 구성이 좋아지고 코드를 재사용할 수 있으며, 한 부분을 바꿔도 전체를 다시 컴파일할 필요가 없습니다.

두 가지 파일 종류

모듈화된 C 프로젝트는 두 종류의 파일을 사용합니다.

소스 파일(.c)에는 실제 구현인 함수 본문과 정의가 들어 있습니다.

헤더 파일(.h)에는 다른 파일이 알아야 하는 선언, 즉 함수 원형, 자료형 정의, 매크로가 들어 있습니다.

헤더 파일

헤더는 그것이 존재한다는 것을 선언하지만, 어떻게 동작하는지는 설명하지 않습니다.

여기서 math_utils.h는 add 함수를 선언합니다. 이 헤더를 포함하는 모든 파일은 함수의 서명을 알게 되어 호출할 수 있습니다.

/* math_utils.h */
int add(int a, int b);

짝을 이루는 소스 파일

소스 파일은 구현을 제공합니다. 컴파일러가 정의와 선언이 일치하는지 확인할 수 있도록 자신의 헤더를 포함합니다.

헤더를 큰따옴표로 포함한 점에 주목하세요. 큰따옴표는 자체 프로젝트 파일에 사용합니다.

/* math_utils.c */
#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}

모듈 사용하기

이제 main.c가 헤더를 포함하고 add를 호출합니다. 함수 본문은 보지 않고 원형만 봅니다.

컴파일러는 선언을 신뢰하고, 링커가 나중에 호출을 math_utils.c의 실제 구현과 연결합니다.

/* main.c */
#include <stdio.h>
#include "math_utils.h"

int main(void) {
    printf("%d\n", add(2, 3));
    return 0;
}

큰따옴표와 꺾쇠괄호 비교

#include 지시문에는 두 가지 형식이 있습니다.

#include <stdio.h>는 시스템 및 표준 라이브러리 헤더에 꺾쇠괄호를 사용합니다. 컴파일러는 표준 포함 경로를 검색합니다.

#include "math_utils.h"는 자체 헤더에 큰따옴표를 사용하며, 현재 디렉터리에서 먼저 검색합니다.

#include <stdio.h>      /* standard library */
#include "math_utils.h" /* your project */

헤더에 넣을 내용

헤더에는 정의가 아니라 선언을 넣으세요.

좋은 헤더에는 함수 원형, struct 및 typedef 선언, #define 매크로, extern 변수 선언이 들어갑니다.

함수 본문이나 변수 정의는 넣지 마세요. 중복 기호 오류가 발생할 수 있습니다.

/* shapes.h */
typedef struct {
    double width;
    double height;
} Rect;

double rect_area(Rect r);

소스 파일에 넣을 내용

소스 파일에는 실제 작업인 함수 정의와 해당 파일의 전용 도우미가 들어갑니다.

컴파일러가 서명이 일치하는지 확인하도록 짝을 이루는 헤더를 포함합니다. 이렇게 하면 링크 시점이 아니라 초기에 불일치를 발견할 수 있습니다.

/* shapes.c */
#include "shapes.h"

double rect_area(Rect r) {
    return r.width * r.height;
}

선언과 정의 비교

이 구분은 모듈화된 C의 핵심입니다.

선언은 이름의 자료형과 서명을 컴파일러에 알려 사용 가능하게 합니다: int add(int, int);

정의는 실제 개체를 만들고 저장 공간을 할당하거나 본문을 제공합니다. 헤더는 선언하고 소스 파일은 정의합니다.

int add(int a, int b);          /* declaration */
int add(int a, int b) {         /* definition */
    return a + b;
}

이름 지정 규칙

각 모듈을 이름으로 짝짓는 방식이 일반적입니다. 예를 들어 logger.h와 logger.c, parser.h와 parser.c를 짝짓습니다.

이렇게 하면 구현이 어디에 있는지 분명해집니다. 관련 함수를 하나의 모듈로 묶어 각 파일이 명확한 하나의 책임을 갖게 하세요.

/* logger.h */
void log_info(const char *msg);
void log_error(const char *msg);

빌드 과정 살펴보기

각 .c 파일은 독립적으로 컴파일되어 목적 파일이 되고, 모든 목적 파일이 링크되어 하나의 프로그램이 됩니다.

헤더는 자체적으로 컴파일되지 않습니다. 헤더를 포함하는 소스 파일에 텍스트로 삽입됩니다. 전체 빌드 흐름은 이후 수업에서 살펴보겠습니다.

gcc -c main.c        /* -> main.o */
gcc -c math_utils.c  /* -> math_utils.o */
gcc main.o math_utils.o -o app

빠른 확인

헤더와 소스의 역할을 얼마나 이해했는지 확인해 보세요.

복습

C 프로젝트를 .h 헤더와 .c 소스 파일로 나누는 방법을 배웠습니다.

헤더는 무엇이 존재하는지 선언하고, 소스 파일은 그것이 어떻게 동작하는지 정의합니다. 자체 헤더에는 큰따옴표를, 표준 헤더에는 꺾쇠괄호를 사용하세요.

다음에는 헤더가 두 번 이상 포함되어 발생하는 문제를 막아 보겠습니다.

자주 묻는 질문

“헤더와 소스 파일” 강의는 무료인가요?

네 — “헤더와 소스 파일” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C Academy 강의 전체를 잠금 해제할 수 있습니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“헤더와 소스 파일”에서 뭘 배우나요?

선언과 코드를 분리해 보세요. 브라우저에서 직접 실행하는 실습 코드로 C Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“헤더와 소스 파일” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 헤더와 소스 파일
  2. 포함 방지 장치
  3. extern과 연결
  4. 여러 파일 컴파일하기
← C Academy(으)로 돌아가기