멀티플레이 개발
언리얼에서 객체가 유효한지 검사할 때는 상황에 따라 checkf, ensureMSgf, if(IsValid(...))를 구분해서 사용한다.
checkf(
IsValid(HUDWidgetClass),
TEXT("HUDWidgetClass must be assigned.")
);
조건이 거짓이면 오류 메시지와 호출 스택을 남기고 실행을 중단
checkf는 단순한 예외 처리가 아니라, 정상적인 코드 흐름에서는 절대로 실패해서는 안 되는 전제 조건을 검사할 때 사용한다
예를 들어 특정 클래스가 반드시 설정되어 있어야만 객체 자체가 정상적으로 동작할 수 있다면 사용할 수 있다.
다만 실패하면 에디터까지 종료될 수 있으므로 자주 사용하는 것은 좋지 않음
if (!ensureMsgf(
IsValid(HUDWidgetClass), T
EXT("HUDWidgetClass is not assigned.")
))
{
return;
}
조건이 거짓이면 오류 메시지와 호출 스택을 남기지만, checf처럼 즉시 프로그램을 종료하지는 않는다.
개발자의 설정 실수를 확인하고 싶지만 에디터까지 종료시키고 싶지 않을때 유용하다. 블루프린트에서 위젯 클래스를 할당하지않거나, 데이터 에셋을 연결하지않는 실수에서 사용 가능하다.
ensureMsgf는 문제를 알려줄 뿐 이후 실행을 자동으로 막아주지는 안ㅇㅎ으므로, 필요한 경우 직접 return 해야 한다.
if (!IsValid(PlayerState))
{
UE_LOG( LogTemp, Warning, TEXT("PlayerState is invalid.") );
return;
}
실행 중 정상적으로 발생할 가능성이 있는 상황에는 일반적인 방어 코드를 사용한다.
이 경우는 프로그램을 강제로 종료할 이유가 없으므로 로그를 남기고 안전하게 함수에서 빠져나간다.
사용 기준
절대로 실패하면 안 되는 코드 불변조건
→ checkf
개발자의 설정 실수이며 호출 스택을 확인하고 싶음
→ ensureMsgf + return
실행 중 충분히 발생할 수 있는 상황
→ if + IsValid + UE_LOG + return