✅ IMYU에 대해서 알아보자!
언리얼 C++를 공부하다 늘 헤더파일에 추가되어 있는 CoreMinimal.h 헤더 파일이 뭔지 찾아보다가 IWYU라는 개념이 나왔습니다.
정말 처음 들어보는 생소한 개념이라 정리를 하게 되었습니다.
IWYU는 'Include What You Use'의 약자로 C, C++ 프로그래밍에서 사용되며 소스 코드 파일에 필요한 헤더 파일을 정확하게 포함하도록 하는 모델입니다.
과거의 언리얼 엔진은 Engine.h
와 UnrealEd.h
와 같은 모놀리식 (Monolithic)
헤더 를 포함하였습니다.
모놀리식이란 여러 요소가 하나의 거대한 아키텍쳐를 구성할 때 의존성이 강한 구조를 의미합니다.
프로젝트 규모가 커짐에 따라 코스트가 매우 커지는 단점이 있다.
언리얼 엔진이 업데이트를 거듭함에 따라이 점점 복잡해지고 거대해지면서 모놀리식 헤더로 인해 병목현상이 발생하게 되었습니다.
이를 해결하기 위해 IWYU 모델을 추가해 필요한 내용만 포함하였습니다.
이때 C++ 클래스가 사용할 가능성이 높고 오브젝트가 동작할 수 있는 최소 기능만 선언된 헤더 파일이 CoreMinimal.h
입니다.
여기에 UE 코어 프로그래밍 환경의 (FString, FName, TArray)들이 포함되어 있는 것이죠.
IWYU 방식을 사용할 시 아래의 장점들이 있습니다.
- 코드가 필요한 최소한의 헤더 파일만 포함해 빌드 시간이 단축된다.
- 코드의 가독성과 유지보수성을 향상시킨다.
예시 cpp코드를 보겠습니다.
아래의 코드의 경우 #include <string>
헤더 파일은 사용되지 않습니다.
#include <iostream>
#include <vector>
#include <string>
void printHello() {
std::cout << "Hello, World!" << std::endl;
}
int main() {
printHello();
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::cout << "First number: " << numbers[0] << std::endl;
return 0;
}
IWYU 방식에 따라 #inclue <string>
구문을 제거하여 코드의 불필요한 의존성을 줄이고, 컴파일 시간을 단축하는 것입니다.
IWYU를 한줄 요약하면 코드의 효율성과 유지보수성을 높이는데 유용하다고 합니다.
그런데 위 포럼에 따르면 CoreMinimal.h
또한 최소한의 기능을 미리 추가한 것이라 IWYU 방식과는 조금 동떨어졌지만 예외의 경우로 처리한 것 같습니다.