기본 패턴
csharp
private Renderer cachedRenderer;
private void Awake()
{
cachedRenderer = GetComponent<Renderer>();
}설명
- Unity 공식 가이드는
Update안에서 반복되는 비싼 호출 결과를Awake나Start에서 캐싱하라고 권장합니다. GetComponent, 검색 함수, 반복 문자열 조회는 프레임마다 누적되면 비용이 커질 수 있습니다.- 이미 같은 값을 계속 쓸 구조라면 한 번 가져와 저장하는 것이 코드도 읽기 쉬워집니다.
- 단, 대상이 런타임에 교체되는 구조라면 캐싱 값 갱신 시점도 함께 설계해야 합니다.
짧은 예제
csharp
private Rigidbody body;
private void Awake()
{
body = GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
body.AddForce(Vector3.forward, ForceMode.Acceleration);
}빠른 정리
| 항목 | 설명 |
|---|---|
| 초기 캐싱 | Awake나 Start에서 참조 저장 |
| 반복 호출 감소 | 프레임당 비용 누적 완화 |
| 코드 가독성 | 의존 컴포넌트가 더 명확해짐 |
| 교체 시점 고려 | 대상이 바뀌면 캐시도 갱신 필요 |
| 작은 비용도 누적 | 많은 오브젝트에서 차이가 커짐 |
주의할 점
캐싱 자체가 목적이 되면 코드가 불필요하게 복잡해질 수 있습니다. 정말 반복되는 호출인지, 그리고 실제 병목인지 먼저 보는 편이 좋습니다.
참고 링크
2 sources