[Unreal/C++] GENERATED_BODY(), generated.h
Unreal UCLASS()에서의 GENERATED_BODY() 와 {className}.generated.h를 살펴봅니다.
GENERATED_BODY() 매크로는 ObjectMacros.h파일에 선언되어 있습니다. (하단 경로 참조)
UE_{Version}\Engine\Source\Runtime\CoreUObject\Public\UObject\ObjectMacros.h
아래 사진을 살펴보면 708번 째 줄에 GENERATED_BODY() 매크로가 있습니다.
이 매크로는 다시 BODY_MACRO_COMBINE 매크로를 호출합니다.
CURRENT_FILE_ID,_,__LINE__,_GENERATED_BODY 인자를 받고 있는 것을 확인할 수 있고
이 매크로는 또 BODY_MACRO_COMBINE_INNER (A,B,C,D)를 호출합니다.
최종적으로 이 매크로가 가지고 있는 토큰 '##'을 사용하여 A, B, C, D 인자를 하나로 묶은 긴 단어를 만들어 냅니다.
결국 GENERATED_BODY() 매크로는
CURRENT_FILE_ID,
_,
__LINE__,
_GENERATED_BODY
4가지 정보를 합쳐 하나의 긴 문자를 만든다고 볼 수 있습니다.
이 정보는 어디에서 활용되는지 이해하려면 generated.h 파일을 열어봐야합니다.
이 파일은 프로젝트 폴더 내에서 아래 경로를 확인해야합니다.
{ProjectName}\Intermediate\Build\Win64\UnrealEditor\Inc\CatchMe\UHT
이 파일들이 복잡한 경로에 있는 이유는 굳이 이 파일을 건드릴 필요가 없다는 것을 의미합니다.
이 파일을 열어 확인해 보면 아래와 같이 복잡하고 알 수 없는 정보들로 가득합니다.
파일 하단을 보면 위에서 잠깐 보았던 CURRENT_FILE_ID 항목을 볼 수 있습니다.
BODY_MACRO_COMBINE(CURRENT_FILE_ID,_,__LINE__,_GENERATED_BODY) 에서 사용되었습니다.
그렇게 ID와 '_'가 들어가고 뒤로 라인 정보와 GENERATED_BODY라는 것이 붙게됩니다.
이 정보는 정확하게 합쳐져서 만들어진다고 볼 수 있습니다.
결론적으로 GENERATED_BODY() 매크로는 generated.h 파일의 저 부분을 담당하고 있다고 볼 수 있습니다.
그 아래에 선언된 매크로들은 몰라도 무방합니다.
궁금하다면 한 번 찾아보는 것도 좋지만, 객체 지향 설계를 위해서 제공되는 기능들을 언리얼 엔진이 자동으로 생성해서 지원해 준다고만 알고 있어도 코드를 작성하는데 지장이 없습니다.
generated.h 파일은 삭제가 되어도 언리얼 엔진이 자동으로 생성해줍니다.
삭제하게 되면 Unreal에서는 언리얼 에디터용 빌드에 있는 헤더파일을 파싱합니다.
Parsing headers for UnrealObjectEditor
이 작업은 UnrealHeaderTool(UHT)이라는 프로그램이 실행되면서 generated.h 파일을 생성합니다.
그러므로 {className}.generated.h 파일이 없다면 언리얼 C++ 코드를 사용할 수 없게 됩니다.
'Unreal > Manual' 카테고리의 다른 글
Unreal 문자열 TCHAR (0) | 2024.04.30 |
---|---|
Unreal 언리얼 네트워크 복제 시스템 이해 (0) | 2024.03.16 |
Unreal 멀티 플레이어 온라인 서브시스템 Steam 연결하기 (2) | 2024.03.15 |
Unreal Subsystem을 활용한 Unreal 스타일 싱글톤 패턴 (0) | 2024.03.15 |
Unreal 수명이 관리되는 자동 인스턴싱 프로그래밍 서브시스템(Programming Subsystems) (0) | 2024.03.15 |