유니티에서 코드를 짜다보면 값의 null 체크를 자주 하게 된다.
null 체크를 제대로 하지 않으면 순식간에 에러가 중구난방으로 터져서 정확한 에러 위치 파악이 힘들 수 있다.
그리고 에러가 터졌음에도 뒤에 코드가 계속 실행되고 있는 것을 알 수 있다.
우리가 주로 사용하는 null 체크 방식인
if(object_A == null)
{
Debug.Log("A 오브젝트가 할당되지 않았습니다.");
}
이 코드가 있겠지만 뭔가 좀 공간을 많이 차지하는 것 같고 귀찮다.
그럴 때 사용할 수 있는 클래스가 Assert 클래스이다.
사용법
Assert함수는 변수의 값을 보장해주는 함수이다. 주로 다음과 같은 내용을 검사한다.
값이 null인가?
값이 같은가?
값이 특정 범위 내에 있는가?
만약 조건을 충족하지 않으면 에러를 던지게 된다.
우선
using UnityEngine.Assertions;
클래스를 사용하려면 위와 같은 namespace를 불러와야 한다.
그리고
GameObject testGameObject;
int testInt;
bool testBoolean;
void Update()
{
Assert.IsNotNull(testGameObject, "testGameObject가 할당되어 있지 않습니다.");
Assert.AreNotEqual(0, testInt, "testInt가 0이 아닙니다.");
Assert.IsTrue(testBoolean, "testBoolean이 true가 아닙니다.");
// 실행 코드
}
다음과 같이 사용하면 만약 해당 변수가 조건을 만족하지 않으면 두번째 인자의 메세지를 에러를 던지게 되고, 뒤에 코드를 실행하지 않게 된다.
나는 주로 public 또는 SerializedField로 에디터에서 값을 할당해줄 때 유용하게 사용한다.
왜 사용해야 하는가?
두가지 장점이 있다.
에러의 정보를 빠르게 확인할 수 있다.
Assertions는 매우 상세하게 에러의 정보를 제공해 주기 때문에 매우 빠르게 에러의 위치와 문제를 파악할 수 있다. 이는 프로젝트의 규모가 클수록 더 중요한 역할을 한다.
코드의 가독성이 높아진다.
나머지 코드블록을 실행 하기 전에 특정 지점에서 어떤 조건을 충족해야 하는지 매우 명확해진다. 협업이나 미래의 나에게 도움이 될 수 있다.
의문점
Q. 빌드파일에서는 에러가 뜨더라도 계속 실행이 됐으면 좋겠는데..
A. 에디터에서만 에러를 던지고 다음 코드를 실행하지 않기 때문에 괜찮다.
Q. if문하고 != null 쓰면 되는거 아닌가요?
A. 쓰고 싶으면 써도 되지만 이게 더 짧고 가독성이 좋다.
'게임 개발' 카테고리의 다른 글
Unity Engine 내에서 오브젝트 중심으로 Pivot 옮기 (0) | 2024.05.26 |
---|---|
LateUpdate가 중요한 이유 (0) | 2024.04.25 |
Start vs Awake 확실하게 알고 가자 (0) | 2024.04.23 |
BoxCollider does not support negative scale or size. (0) | 2024.04.22 |