MINIMAL_WINDOWS_API는 Windows 플랫폼에서 최소한의 Windows API를 사용하도록 지정하는 매크로입니다. Unreal Engine 5와 같은 게임 엔진에서 이 매크로를 사용하는 이유와 사용 시점을 설명드리겠습니다.
왜 MINIMAL_WINDOWS_API를 사용하는가?
Windows 플랫폼에서 코드를 작성할 때, Windows API는 매우 방대하고 다양한 기능을 제공합니다. 하지만 모든 기능을 사용하지 않는 경우가 많고, 필요 없는 기능까지 포함하면 컴파일 시간 증가, 메모리 사용량 증가, 충돌 가능성 증가 등의 문제를 일으킬 수 있습니다. MINIMAL_WINDOWS_API는 이러한 문제를 피하고, 필요한 최소한의 Windows API만 포함하도록 하기 위해 사용됩니다.
MINIMAL_WINDOWS_API의 사용 시점
- 게임 엔진의 크기와 복잡성 관리:
- Unreal Engine 5와 같은 대형 게임 엔진에서는 필요하지 않은 API를 포함하는 것을 피하여 코드의 크기와 복잡성을 줄입니다.
- 컴파일 시간 단축:
- 포함하는 헤더 파일의 수를 줄임으로써 컴파일 시간을 줄입니다. 큰 프로젝트에서는 컴파일 시간의 최적화가 매우 중요합니다.
- 충돌 방지:
- Windows API와 다른 라이브러리나 사용자 정의 코드 사이의 네임스페이스 충돌을 방지합니다.
- 메모리 사용량 감소:
- 불필요한 API를 제외하여 메모리 사용량을 줄입니다. 이는 특히 메모리가 제한된 시스템에서 중요합니다.
코드 예시와 주석
다음은 MINIMAL_WINDOWS_API를 사용하는 간단한 예제입니다:
// Windows.h 헤더 파일은 기본적으로 많은 Windows API를 포함합니다.
#define WIN32_LEAN_AND_MEAN // 최소한의 Windows API만 포함하도록 정의합니다.
#define MINIMAL_WINDOWS_API // Unreal Engine 5에서는 이 매크로를 사용하여 최소한의 API만 포함하도록 합니다.
#include <Windows.h> // 이제 Windows.h는 필요한 최소한의 API만 포함합니다.
int main() {
// 여기에 필요한 최소한의 Windows API를 사용할 수 있습니다.
MessageBoxA(NULL, "Hello, World!", "Minimal Windows API Example", MB_OK);
return 0;
}
주석과 함께 자세히 설명
// WIN32_LEAN_AND_MEAN은 Windows.h 헤더 파일에 포함되는 내용을 줄여줍니다.
// 이를 통해 컴파일 시간을 단축하고 메모리 사용량을 줄일 수 있습니다.
#define WIN32_LEAN_AND_MEAN
// MINIMAL_WINDOWS_API는 Unreal Engine 5에서 사용하는 매크로로,
// 필요 없는 Windows API를 제외하여 엔진의 크기와 복잡성을 줄입니다.
#define MINIMAL_WINDOWS_API
// Windows.h를 포함합니다. WIN32_LEAN_AND_MEAN과 MINIMAL_WINDOWS_API가 정의되어 있으므로,
// Windows.h는 최소한의 API만 포함하게 됩니다.
#include <Windows.h>
int main() {
// MessageBoxA 함수는 최소한의 Windows API에 포함된 함수로,
// 간단한 메시지 박스를 표시합니다.
MessageBoxA(NULL, "Hello, World!", "Minimal Windows API Example", MB_OK);
return 0;
}
정리
MINIMAL_WINDOWS_API는 Unreal Engine 5에서 Windows API를 사용할 때, 필요한 최소한의 API만 포함하도록 하여 코드의 크기와 복잡성을 줄이고, 컴파일 시간과 메모리 사용량을 최적화하기 위해 사용됩니다. 이 매크로는 특히 대규모 프로젝트에서 유용하며, 불필요한 기능들을 제외함으로써 보다 효율적인 코드를 작성할 수 있게 해줍니다.
'개발이야기 > 언리얼 c++' 카테고리의 다른 글
언리얼 C++ : Ensure와 EnsureMsgf란? (0) | 2024.05.27 |
---|---|
언리얼 엔진의 델리게이트 기초와 심층분석 (0) | 2024.05.27 |
언리얼 C++: #define (0) | 2024.05.24 |
언리얼 C++ : typedef와 typedef struct는 왜 사용하는 걸까? (1) | 2024.05.24 |
언리얼 C++: 인라인 함수 (FORCEINLINE) (0) | 2024.05.24 |