마지막 업데이트: 26 Feb, 2026

C++ 프로그램을 작성할 때, 특히 대규모 프로젝트에서는 코드를 여러 파일로 조직하는 것이 가독성과 유지 보수를 위해 필수적입니다. 일반적으로 헤더 파일을 사용하며, 확장자는 .h 또는 .hpp입니다. 하지만 이 두 파일의 차이점은 무엇이며, 어느 것을 사용해야 할까요?
이 기사에서는 .h와 .hpp 파일의 차이점을 자세히 살펴보고, 그 역사를 탐구하며, 모범 사례에 대한 안내를 제공하겠습니다.
C++에서 헤더 파일 이해하기
헤더 파일은 함수, 클래스, 상수 및 매크로에 대한 선언을 포함하고 있으며, 이를 여러 소스 파일에 포함시킬 수 있습니다. 이러한 파일은 #include 지시문을 사용하여 .cpp (C++ 소스) 파일에 포함됩니다.
헤더 파일의 일반적인 내용
- 클래스 정의
- 함수 선언
- 상수 정의
- 매크로
- 템플릿 (일부 경우)
.h 파일
.h 파일이란?
.h 파일은 전통적인 헤더 파일이며 처음에는 C 프로그래밍 언어에서 널리 사용되었습니다. 여전히 C와 C++ 프로젝트 모두에서 인터페이스를 선언하는 데 사용됩니다.
사용 예시:
// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H
int add(int a, int b);
int subtract(int a, int b);
#endif
장점:
- 범용적으로 인식됨 (C와 C++ 모두에서 사용).
- C와 C++ 코드를 모두 포함하는 프로젝트에 적합.
단점:
- C++ 프로젝트에서 파일이 C 스타일인지 C++ 스타일인지 혼동을 일으킬 수 있음.
.hpp 파일
.hpp 파일이란?
.hpp 파일은 C++ 전용 헤더 파일입니다. .h 파일과 동일하게 동작하지만 헤더가 C++ 코드를 위한 것임을 명시적으로 표시하는 데 사용됩니다.
사용 예시:
// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP
#include <vector>
std::vector<int> filter_even(const std::vector<int>& input);
#endif
장점:
- 파일이 C++ 코드를 위한 것임을 명확히 표시.
- C와 C++를 혼용할 때 혼란을 방지.
- 혼합 언어 프로젝트나 엄격한 명명 규칙을 따르는 팀에 유용.
단점:
- 구식 코드베이스에서는 다소 덜 일반적.
.h를 기대하는 일부 레거시 시스템에서 인식되지 않을 수 있음.
.h vs .hpp: 주요 차이점
| 특징 | .h 파일 | .hpp 파일 |
|---|---|---|
| 언어 연관성 | C 및 C++ | C++ 전용 |
| 관례 또는 규칙? | 관례 | 관례 |
| C++ 프로젝트에서 사용 | 일반적 | 명확성을 위해 일부 선호 |
| 템플릿 지원 | 예 | 예 |
| 코드 모호성 | 혼합 언어 프로젝트에서 가능성 있음 | 덜 가능성 있음 |
.h와 .hpp 선택을 위한 모범 사례
다음은 선택에 도움이 되는 일반적인 가이드라인입니다:
.h를 사용해야 할 경우:
- C와 C++ 모두와 호환되어야 하는 코드를 작성할 때.
- 이미
.h를 사용하고 있는 레거시 코드를 유지보수하거나 확장할 때.
.hpp를 사용해야 할 경우:
- 파일이 C++ 전용임을 명확히 하고 싶을 때.
- C++ 전용 프로젝트에서 작업하거나 클래스, 템플릿, 네임스페이스와 같은 C++ 전용 기능을 사용할 때.
일반적인 프로젝트 구조
.h 사용 예시:
project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp
.hpp 사용 예시:
project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp
두 구조 모두 유효하며, 차이는 주로 명확성과 팀 선호도에 있습니다.
결론
.h와 .hpp 중 선택은 기능이 아니라 관례에 관한 문제입니다. 두 파일 모두 동일한 목적을 수행합니다: 여러 C++ 소스 파일에 걸쳐 인터페이스와 공유 코드를 선언하는 것입니다.
하지만 C++ 전용 코드의 경우 .hpp를 사용하면 의도를 더 명확히 할 수 있고, 특히 다중 언어가 혼합된 대규모 코드베이스에서 혼란을 방지하는 데 도움이 됩니다. 혼합 언어 또는 레거시 프로젝트에서는 여전히 .h가 적합할 수 있습니다.
핵심 요점:
.hpp를 사용하면 “이 파일은 C++ 코드 전용"이라는 신호를 보낼 수 있습니다 — C와 C++가 혼합된 환경에서 작업한다면.h를 유지하세요.