✏️ 함수 원형
public bool TryGetComponent(out T component);
찾는 컴포넌트가 있을 경우 true를 반환,
없을 경우 false를 반환.
GetComponent 후 null 검사를 하는 구문이 있을때 사용하면 좋다.
transform = GetComponent<Transform>();
if (transform != null)
{
...
}
🔽
if (TryGetComponent(out Transform transform))
{
...
}
찾는 컴포넌트를 발견하지 못했을 때 GetComponent의 경우 GC 할당이 발생한다는 글을 읽어서 이유가 뭔지 한참 찾아 헤맸다.
존재여부를 검사하고 null을 반환하는 로직은 같을텐데 왜 메모리 할당에서 차이가 난다는건지.. 🤨
정확한 근거를 찾지는 못했지만 이 블로그의 내용을 바탕으로 작성된 내용이었던 것 같다.
결국은 유니티의 fake null 문제인데 언제 한번 날을 잡아서 제대로 공부해봐야겠다.
결론적으로 에디터상일 때를 제외하면 코드가 조금 더 간결해진다 이외의 특출난 차이점은 없는것 같다.
➕
transform = GetComponent<Transform>();
if (transform != null)
{
...
}
위와 같이 if 문의 조건을 검사하기 위해 transform 컴포넌트가 null인 경우에도
검사용 새 인스턴스를 할당(=fake null) 해야하기 때문에 메모리 누수가 발생한다는 이야기인 것 같다.