어두운 배경이 싫으시다면 페이지 우측 하단에 보이는 초승달 모양의 아이콘을 클릭하면 화이트모드로 변경됩니다. 초승달 모양 버튼 : `화이트/다크 모드` 전환 |
1. IWYU 모델이란
언리얼 엔진은 4.16부터 IWYU 모델을 사용하여 코드 컴파일을 최적화하였습니다. 과거에는 `Engine.h` 또는 `UnrealEd.h`와 같은 모놀리식(하나의 큰 덩어리) 헤더 파일을 포함하여 한꺼번에 컴파일을 하다보니 개발할 때 컴파일 시간이 너무 많이 소요되고 병목현상이 발생하였습니다. 그래서 4.16부터 컴파일 속도를 최소화하는 목적으로 등장한 것이 IWYU 모델입니다.
IWYU는 Include-What-You-Use, 해석하면 '너가 원하는 것만 포함'하라는 의미입니다. 과거에는 `Engine.h` 혹은 `EngineMinimal.h` 등을 프로젝트 모듈 헤더에 추가한 뒤 해당 모듈 헤더를 각각 새로 추가한 클래스 소스(cpp파일)에 추가하여 사용하는 식이어서 별도의 엔진 헤더를 추가할 필요 없이 바로 사용할 수 있었습니다.
하지만 IWYU 모델을 사용하게 되면 각각 새로 생성한 클래스 헤더에 `CoreMinimal.h`를 추가하여 최소한의 코드만 클래스에 Include하여 사용하고, 이 외의 코드는 cpp 소스파일에 하나씩 추가하고, 헤더에 선언할 때에는 전방선언(`class StaticMeshComponent;`)으로 작업합니다.
이렇게 하면 코드 최적화도 되고, 컴파일 속도도 빠르게 수행할 수 있지만 단점은 내가 사용하고자 하는 헤더파일이 어디 있는지 언리얼 API 문서를 통해서 하나하나 확인해야 하기 때문에 잘 모르는 초보자들은 찾기가 어려울 수 있습니다.
그래서 초보자들은 우선 블루프린트를 사용하여 엔진에서 사용하는 클래스들이 무엇이 있는지 먼저 파악하고 C++로 변환하는 작업을 해보는 게 도움이 됩니다.
IWYU 모델을 사용하여 작업하다보면 간혹 IWYU 정책에 따라서 제대로 코드를 작성해도 빨간 줄(에러) 표시를 해줄 때가 있습니다. 실제 빌드할 때 영향을 주지 않는 경우에는 Intellisense의 오작동이므로 관련된 내용은 언리얼 엔진의 Visual Studio 설정 관련한 Document를 참고해 주시면 됩니다.
2. IWYU 모델 사용 시 규칙
모든 헤더 파일에는 필수 종속성이 포함된다.
→ 새로 추가한 클래스 헤더에는 항상 `CoreMinimal.h`가 포함되어야 합니다.
.cpp 파일은 자신과 일치하는 .h 파일을 먼저 포함한다.
→ 예를 들면 Test.cpp의 가장 최상단에는 Test.h가 Include 되어야 합니다. 그 위에 다른 엔진 소스를 Include하면 빌드 시 오류가 발생합니다.
PCH 파일은 더 이상 명시적으로 포함되지 않는다.
→ 제대로 사용해 본 적이 없다 보니 자세한 정보는 모르겠지만 현시점에서 PCH 파일은 여전히 사용은 하지만 UnrealBuildTool(UBT)에 의해서 컴파일러 명령 줄에 강제 포함된다고 합니다.
모놀리식 헤더 파일은 더 이상 포함되지 않는다.
→ `Engine.h` 또는 `UnrealEd.h`와 같은 헤더는 더 이상 사용하지 않는다. 사용할 경우 경고를 출력한다.
※ 참고로 `Engine/Engine.h` 헤더는 전혀 다른 헤더이다. 주로 `GEngine`, `UEngine`을 사용할 때 사용한다.
ex) `#include "Engine/Engine.h"`
위의 규칙을 준수하면서 IWYU를 사용하도록 설정하기 위해서는 Build.cs 파일에 `PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;` 가 추가되어야 합니다.
(최신 언리얼 엔진 버전에서는 C++ 프로젝트 생성 시 기본적으로 추가되어 있음.)
이상 언리얼 엔진의 IWYU 정책 모델에 관한 설명이었습니다.
구독 및 좋아요는 컨텐츠를 생산하는데 많은 도움이 됩니다. 😊
감사합니다.