반응형
1. check(조건)
가장 강력하고 엄격한 어설션입니다.
- 동작: 조건이 거짓이면 게임을 즉시 중단(Crash)시키고 로그를 남깁니다.
- 특징: Shipping 빌드(배포판)에서는 코드 자체가 삭제됩니다. 즉, 개발 단계에서만 동작하며 릴리즈된 게임의 성능에는 영향을 주지 않습니다.
- 사용 예시: "이 포인터는 여기서 절대 null일 수 없다"고 확신할 때 사용합니다.
check(MeshComponent != nullptr); MeshComponent->SetVisibility(true); // 만약 null이었다면 위에서 이미 멈췄을 것
2. ensure(조건)
조금 더 유연한 어설션입니다.
- 동작: 조건이 거짓이면 콜스택(Call Stack)을 로그에 출력하지만, 게임은 멈추지 않고 계속 실행됩니다. (에디터에서는 한 번만 멈추고 디버거를 띄워줍니다.)
- 특징: check와 마찬가지로 Shipping 빌드에서는 제거됩니다.
- 사용 예시: "문제가 있긴 하지만, 당장 크래시를 낼 정도는 아닐 때" 또는 "문제를 인지만 하고 실행은 계속하고 싶을 때" 사용합니다. if문과 조합해서 자주 씁니다.
if (ensure(WeaponActor != nullptr)) { WeaponActor->Fire(); }
3. verify(조건)
check와 거의 동일하지만, 한 가지 결정적인 차이가 있습니다.
- 동작: 조건이 거짓이면 **즉시 중단(Crash)**됩니다.
- 특징: Shipping 빌드에서도 코드가 삭제되지 않고 실행됩니다. 단, Shipping 빌드에서는 "조건 검사"는 수행하지만 "실패 시 크래시" 기능은 비활성화됩니다.
- 사용 예시: 조건식 안에 실제 로직(함수 호출)이 포함되어 있을 때 사용합니다. check를 쓰면 릴리즈 시 함수 호출 자체가 사라져버리지만, verify는 함수를 실행해 줍니다.
// Shipping 빌드에서도 OpenDoor()는 실행되어야 함 verify(OpenDoor() == true);
💡 한눈에 비교하기
| 매크로 | 실패 시 결과 | Shipping 빌드 포함 여부 | 용도 |
| check | 즉시 중단 (Crash) | 제거됨 | 치명적인 오류 확인 (개발용) |
| ensure | 로그 출력 후 계속 실행 | 제거됨 | 경고 및 비치명적 오류 확인 |
| verify | 즉시 중단 (Crash) | 표현식은 유지됨 | 반환값이 있는 로직 확인 |
4. 기타 유용한 변형들
- checkNoEntry(): 절대 도달해서는 안 되는 코드 경로에 둡니다. (예: switch문의 default 케이스)
- checkf(조건, L"메시지"): 실패했을 때 사용자 정의 메시지를 로그에 함께 출력합니다. (check, ensure, verify 모두 뒤에 f를 붙인 버전이 존재합니다.)
- unimplemented(): 아직 구현되지 않은 함수임을 표시하며, 호출 시 크래시를 발생시킵니다.
반응형
'게임 개발 > Unreal Engine 기본' 카테고리의 다른 글
| Unreal Engine CDO 사용 방법 (0) | 2025.12.30 |
|---|---|
| Unreal Engine CDO 사용 이유 (0) | 2025.12.30 |
| TObjectPtr를 사용하는 이유 (0) | 2025.12.30 |
| Unreal Engine의 PrimaryAsset (0) | 2025.12.29 |
| PRAGMA_DISABLE_OPTIMIZATION과 PRAGMA_ENABLE_OPTIMIZATION 매크로 (0) | 2025.12.29 |