[Unity] TryGetComponent에 대한 고찰

0시0분·2023년 11월 23일
0

Unity

목록 보기
11/19

✏️ 함수 원형

public bool TryGetComponent(out T component);

찾는 컴포넌트가 있을 경우 true를 반환,
없을 경우 false를 반환.

GetComponent 후 null 검사를 하는 구문이 있을때 사용하면 좋다.

transform = GetComponent<Transform>();
if (transform != null)
{
	...
}

🔽

if (TryGetComponent(out Transform transform))
{
	...
}

GetComponent〈T〉 와의 차이점

찾는 컴포넌트를 발견하지 못했을 때 GetComponent의 경우 GC 할당이 발생한다는 글을 읽어서 이유가 뭔지 한참 찾아 헤맸다.

존재여부를 검사하고 null을 반환하는 로직은 같을텐데 왜 메모리 할당에서 차이가 난다는건지.. 🤨

정확한 근거를 찾지는 못했지만 이 블로그의 내용을 바탕으로 작성된 내용이었던 것 같다.
결국은 유니티의 fake null 문제인데 언제 한번 날을 잡아서 제대로 공부해봐야겠다.

결론적으로 에디터상일 때를 제외하면 코드가 조금 더 간결해진다 이외의 특출난 차이점은 없는것 같다.



(2024-02-05 추가)

transform = GetComponent<Transform>();
if (transform != null)
{
	...
}

위와 같이 if 문의 조건을 검사하기 위해 transform 컴포넌트가 null인 경우에도
검사용 새 인스턴스를 할당(=fake null) 해야하기 때문에 메모리 누수가 발생한다는 이야기인 것 같다.

0개의 댓글