언리얼 엔진/언리얼 엔진 개념

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++을 사용할 때, 이 세 가지 헤더 파일의 역할을 이해하고 적절히 사용하면 보다 효율적으로 개발할 수 있습니다! 🚀