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 |