언리얼 엔진/언리얼 엔진 개념
Unreal Engine - 헤더 파일 정리
로안님
2025. 2. 10. 16:49
Unreal Engine에서 C++로 개발할 때, 기본적으로 포함하는 주요 헤더 파일 세 가지를 정리해보겠습니다.
왜 이것들이 궁금해졌을까?
처음 #include "BaseItem.generated.h"가 항상 마지막에 있어야 한다는 규칙을 접했을 때, 왜 그래야 할까? 라는 의문이 들었습니다. 만약 반드시 마지막에 있어야 한다면, 다른 #include 문들은 어떤 역할을 하는 걸까? 이 궁금증에서 출발하여 CoreMinimal.h, GameFramework/Actor.h, 그리고 BaseItem.generated.h가 각각 어떤 역할을 하는지 정리해보았습니다.
1. #include "CoreMinimal.h"
🔹 역할
- Unreal Engine의 **핵심 기능(Core Features)**을 포함하는 헤더 파일
- 기본적인 자료형(FString, TArray, TMap 등), 수학 연산, 로깅, 메모리 관리 등을 제공
- 거의 모든 Unreal C++ 클래스에서 사용됨
🔹 주요 포함 기능
- Core.h → 기본적인 Unreal Engine 코어 기능
- Containers/Array.h → TArray, TMap 등 컨테이너 자료형
- Math/UnrealMathUtility.h → 벡터, 회전, 행렬 연산 지원
- Logging/LogMacros.h → UE_LOG() 같은 디버깅용 로그 기능
🔹 예제 코드
#include "CoreMinimal.h"
void MyFunction()
{
FString MyString = TEXT("Hello, Unreal!");
UE_LOG(LogTemp, Warning, TEXT("%s"), *MyString);
}
2. #include "GameFramework/Actor.h"
🔹 역할
- AActor 클래스를 사용하기 위해 반드시 포함해야 하는 헤더 파일
- 모든 게임 내 오브젝트(캐릭터, 아이템, 무기 등)의 기본 클래스인 AActor를 정의
- AActor를 상속받는 모든 클래스에서 필요
🔹 예제 코드
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
class AMyActor : public AActor
{
GENERATED_BODY()
public:
AMyActor();
};
3. #include "BaseItem.generated.h"
🔹 역할
- Unreal Header Tool(UHT)이 자동으로 생성하는 파일
- UCLASS(), UFUNCTION(), UPROPERTY() 같은 매크로를 사용할 수 있도록 지원
- 리플렉션(Reflection) 시스템과 관련된 코드가 자동으로 추가됨
- 항상 헤더 파일의 마지막에 위치해야 함
🔹 왜 항상 마지막에 둬야 할까?
- UHT가 UCLASS() 등을 처리하고 생성한 코드를 generated.h 파일에 추가하기 때문
- 만약 중간에 배치하면 이전 선언이 완료되지 않아 컴파일 오류 발생 가능
🔹 예제 코드
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "BaseItem.generated.h" // 🔥 반드시 마지막에 위치!
UCLASS()
class SPARTAPROJECT_API ABaseItem : public AActor
{
GENERATED_BODY()
public:
ABaseItem();
};
✅ 정리
헤더 파일 역할
CoreMinimal.h | Unreal Engine의 기본적인 기능 제공 (FString, TArray, 로그, 수학 연산 등) |
GameFramework/Actor.h | AActor를 사용하기 위한 필수 헤더 (게임 오브젝트의 기본 클래스) |
BaseItem.generated.h | UHT가 자동 생성하는 파일로, UCLASS(), UFUNCTION(), UPROPERTY()를 사용 가능하게 해줌 (항상 마지막에 위치!) |
Unreal Engine에서 C++을 사용할 때, 이 세 가지 헤더 파일의 역할을 이해하고 적절히 사용하면 보다 효율적으로 개발할 수 있습니다! 🚀