언리얼 null 체크에 관하여

roberto·2025년 3월 6일
  • 언리얼을 공부하면서 눈에 띄는 특징은 null체크를 굉장히 많이 한다는 점이었다.

  • 유니티를 다룰 때도 물론 null체크를 안하는 건 아니었지만 언리얼에서는 복합데이터 형식의 지역변수를 선언할 때마다 null 체크를 필수적으로 하는 경우가 많았다.

	if (ILyraTeamAgentInterface* ControllerAsTeamProvider = Cast<ILyraTeamAgentInterface>(NewController))
	{
		MyTeamID = ControllerAsTeamProvider->GetGenericTeamId();
		ControllerAsTeamProvider->GetTeamChangedDelegateChecked().AddDynamic(this, &ThisClass::OnControllerChangedTeam);
	}
	ULyraAbilitySystemComponent* LyraASC = GetLyraAbilitySystemComponent();
	check(LyraASC);
  • 이런식으로 어떤식으로든 체크를 하는 이유가 궁금해졌다.

1. try catch 사용을 권장하지 않는다.

  • 언리얼 엔진의 특성상 try catch trhow 기능을 퍼포먼스 상의 이유로 사용할 수 없게 되어있다.
  • Exceoption 처리가 되지 않으므로 언리얼에서는 바로 크래시가 발생하기 때문에 체크를 빈번하게 한다.
  • 어차피 유니티라고 null 떨어져서 Exception 떨어지면 다른 수가 생기는 것도 아니다 설계를 잘해둬야지

2. 스레딩

  • 유니티의 경우 메인스레드 의존적이기 때문에 문제 발생 요인이 적다.
  • 언리얼의 경우 스레드가 광범위하기 때문에 안정성을 개발자가 보장해야한다.

3. 메모리 관리

  • 언리얼 : 참조 카운팅 + 주기적 GC, UObject 한정 GC
  • 유니티 : 마크앤 스윕, 모든 관리형 객체 GC
profile
아마도 개발 관련된 것만 올릴듯한 벨로그

0개의 댓글