Unity/기능

[Unity] Find 함수

turbulence93 2025. 8. 7. 22:40

1. Find 함수란?

GameObject.Find는 씬 내의 활성화된 게임 오브젝트 중에서 이름이 일치하는 오브젝트를 찾아 반환하는 함수이다.

필요한 오브젝트를 간편하게 찾아서 사용할 수 있다.

 
GameObject player = GameObject.Find("Player");
  • GameObject.FindWithTag("Player")
  • GameObject.FindGameObjectWithTag("Player")
  • GameObject.FindObjectsOfType<T>()

2. 왜 사용을 자제해야 하는가?

간단 요약: Find 계열 함수는 느리고, 위험하며, 유지보수에 불리하다.

1) 퍼포먼스 문제

  • Find 함수는 씬 전체를 순회하여 검색을 수행한다.
  • 게임 오브젝트가 많을수록 성능 저하가 발생하며, 특히 실시간 호출 시 큰 부담이 된다.

2) 의존성의 불투명함

  • 문자열 기반 검색이라 오타가 있어도 컴파일 에러가 나지 않고 런타임 에러로 이어진다.
  • 찾으려는 오브젝트가 비활성화되어 있거나, 이름이 바뀌었을 경우 null을 반환 → NullReferenceException 발생 가능.

3) 유지보수 어려움

  • 하드코딩된 문자열은 이름 변경 시 추적이 어렵다.
  • 디버깅이나 리팩토링 과정에서 의도치 않은 오류가 생기기 쉽다.

3. 대체 방법

상황 추천 대체 방법
특정 오브젝트 참조 SerializeField로 직접 에디터에서 할당
자식 오브젝트 접근 GetComponentInChildren<T>()
태그 기반 검색 GameObject.FindWithTag() (단, 이 또한 최소화 권장)
초기화 시 자동 참조 Awake() 또는 Start()에서 GetComponent 사용

4. 결론
  • Find 함수는 빠르게 테스트하거나, 임시적으로 오브젝트를 찾을 때는 유용하지만,
    가능한 한 직접 참조 방식이나 컴포넌트 기반 설계를 사용하는 것이 좋다.

'Unity > 기능' 카테고리의 다른 글

[Unity] 회피 구현하기  (0) 2025.09.12
[Unity] 매개변수 params  (1) 2025.08.08
[Unity] CPU 와 GPU  (1) 2025.08.05
[Unity] New Input System 사용하기3  (0) 2025.07.18
[Unity] 람다의 캡처와 클로저 개념  (2) 2025.07.17