Null return은 무슨 의미를 가질까?
Null
우선 Null의 의미부터 파악해 보겠다.
Null은 0과 공백과는 다르다. 포인터나 참조의 대상이 존재하지 않은 것을 나타낸다.
값이 존재하지 않기 때문에 접근하려 할 경우에는 오류가 발생한다. 그래서, 대부분 Null을 오류 로그에서 보거나, 변수의 초기화에서 보았을 것이다.
Null Return
Null return의 의미를 직관적으로 보았을 때는 ‘아무 값도 반환되지 않았다.’이다. 하지만, ‘아무 값도 반환되지 않았다.’라는 것이 어떤 의미를 가지는지 곱씹어 보자.
"매개변수를 가지는 void가 아닌 반환 형식의 함수가 있다."
매개변수 : GameObject
반환 : Rigidbody
기능 : "매개변수로 받은 GameObject의 자식 오브젝트들에서 있는 Rigidbody를 반환한다."
위와 같은 함수가 있을 때, Null 값이 return 되었다. 그렇다면, 왜 null 값이 반환되었을까?
- 매개변수가 Null이라서?
- 자식 오브젝트가 하나도 존재하지 않아서?
- Rigidbody를 가진 자식 오브젝트가 존재하지 않아서?
- 매개변수로 받은 GameObject가 파괴되거나 비활성화 되어서?
- 자식 오브젝트가 아직 생성되지 않아서?
이와 같이 여러가지 원인이 있을 수 있다.
하지만, 이외에도 얼마든지 Null을 반환하는 원인은 있을 수 있다. 이런 상황에서 Null이 반환되는 문제의 원인을 파악하는 것은 쉽지 않다.
Null Return 보완하기
개발하는데 Null이 반환되는 것을 없앨 수는 없다. 그렇기 때문에 우리는 Null로 인해서 발생하는 문제를 빠르게 해결하기 위해서 아래와 같은 개선을 해볼수 있겠다.
함수 서술하기
Null이 반환되는 문제를 완벽하게 해결하기는 힘들다. 그렇기 때문에 함수의 동작을 글로 서술해주는 것은 Null이 발생할 수 있는 부분을 빠르게 파악할 수 있도록 도와준다.
물론 Log를 찍어서 값을 확인해 볼 수 있지만, 근본적으로 왜 Null이 나오게 되었는지에 대한 내용은 파악할 수 없기 때문에, 함수의 동작을 서술해보자는 것이다.
Null 발생에 대응하기
Null이 반환되는 경우는 언제나 있을 수 있다.
"플레이어의 정보를 반환해주는 함수를 호출했을 때, 아직 플레이어 정보가 불러와지고 있는 중이라면."
위의 예시를 확인해 보면, 함수를 통해 받은 플레이어의 정보는 Null일 것이다. 그 의미는 플레이어의 정보가 ‘아직 불러와지고 있는 중’이기 때문에 Null임을 알 수 있다.
이런 경우는 아래와 같이, Null인 경우에 대응할 수 있겠다.
(플레이어 정보 변수) = (플레이어 정보 반환 함수)();
if((플레이어 정보 변수) == null)
{
(플레이어 정보가 불러와질 때까지 대기);
}
(플레이어 정보 변수) = (플레이어 정보 반환 함수)();
반환된 값이 Null일 때, 어떻게 Null 나오게 되었는지 알기 쉽지 않다.
하지만, Null이 반환될 것에 대비하는 것 또한 힘들 수 있다.
‘무조건 Null이 나올 경우에 대비해줘야지!’보다는 그럴 필요성이 느껴지거나 할 수 있는 것부터 차근차근 바꾸어 나가보는 것이 좋을 것 같다.
'유니티 > 개념 정리' 카테고리의 다른 글
| Text와 TextMeshPro (0) | 2024.12.17 |
|---|---|
| StringBuilder (0) | 2024.12.10 |
| Call Back (0) | 2024.12.02 |
| 초기화가 호출되었는가? (0) | 2024.11.28 |
| GC(Garbage Collector) (0) | 2024.11.25 |