Assert란 주어진 코드 조각이 가정하는 상황을 검증하는 도구입니다.
UE4에선 다양한 유형의 검증을 제공하기 위해 매크로 시리즈를 제공합니다.
런타임 Assert 매크로는 실행 중지, 디버그 빌드에서 실행 중지, 실행 중지하지 않고 오류 보고 이렇게 총 3가지 카테고리에 들어갑니다.
실행 중지와 실행 중지하지 않고 오류 보고 유형은 DO_CHECK 디파인에 따라 컴파일되며,
디버그 빌드에서 실행 중지 유형은 DO_GUARD_SLOW 디파인을 사용하여 컴파일됩니다.
해당 디파인 중 어느 하나가 0으로 설정되면 매크로는 비활성화되어 실행에 영향을 끼치지 않습니다.
1. check(표현식)
이 매크로는 표현식을 실행한 뒤, Assert 결과가 false이면 실행을 중지시킵니다. 표현식은 매크로가 빌드에 컴파일되는 경우에만 실행됩니다(DO_CHECK=1). 가장 간단한 형태의 매크로입니다.
check(GEngine); // 엔진이 초기화되었는지 확인
check(GetWorld() != nullptr); // 월드가 제대로 로드되었는지 확인
2. verify(표현식)
이 매크로는 DO_CHECK가 켜져있으면 check 매크로와 동일한 역할을 하지만 DO_CHECK가 꺼져있어도 실행됩니다.
변수 할당이 가정한 대로 되었는지 검증하는데 사용할 수 있습니다.
verify((World = GetWorld()) != nullptr);
3. checkf(표현식, ...)
checkf 매크로는 표현식이 true가 아니면 디버깅에 도움이 되는 추가 정보를 출력하는 것이 가능합니다.
컴파일 면에 있어서는 check 매크로와 동일합니다.
checkf(bActorDestroyed, TEXT( "Failed to destroy Actor %s"), *Actor->GetClass()->GetName());
4. verifyf(표현식, ...)
verifyf 매크로도 verify 매크로와 마찬가지로 항상 실행됩니다.
checkf 매크로처럼 실행을 중지시키면서 디버깅에 도움이 되는 추가적인 디버그 메시지를 남길 수 있습니다.
verifyf(bActorDestroyed, TEXT( "Failed to destroy Actor %s"), *Actor->GetClass()->GetName());
이상으로 UE4에서 주로 쓰이는 Assert 매크로였습니다.
위에 설명한 4가지 매크로 이외에도 다양한 Assert 매크로가 존재합니다.
더 다양한 유형의 Assert 매크로를 확인하고 싶다면 엔진 코드인 아래 헤더 파일을 확인하시기 바랍니다.
/UE4/Engine/Source/Runtime/Core/Public/Misc/AssertionMacros.h.
'언리얼 C++ 프로그래밍' 카테고리의 다른 글
[언리얼 C++] 블루프린트 펑션 라이브러리 (0) | 2021.06.23 |
---|---|
[언리얼 C++] Asset 레지스트리 (0) | 2021.06.20 |
[언리얼 C++] Asset 레퍼런스 (1) | 2021.06.16 |
[언리얼 C++] 클래스, 열거형, 프로퍼티, 함수 명 변경하는 방법 - 코어 리디렉트 (0) | 2021.06.15 |
[언리얼 C++] 비동기 애셋 로딩 (1) | 2021.06.13 |