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

제목 - .h vs .hpp: 차이점은 무엇이며 어느 것을 사용해야 할까요?

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를 유지하세요.

관련 문서