Unity코드 아키텍처와 품질

비싼 호출 캐싱 기본

`Update` 안에서 반복되는 `GetComponent`, 검색, 속성 조회를 줄이기 위한 Unity 캐싱 기본 패턴입니다.

마지막 수정 2026년 3월 19일

기본 패턴

csharp
private Renderer cachedRenderer;

private void Awake()
{
    cachedRenderer = GetComponent<Renderer>();
}

설명

  • Unity 공식 가이드는 Update 안에서 반복되는 비싼 호출 결과를 AwakeStart에서 캐싱하라고 권장합니다.
  • GetComponent, 검색 함수, 반복 문자열 조회는 프레임마다 누적되면 비용이 커질 수 있습니다.
  • 이미 같은 값을 계속 쓸 구조라면 한 번 가져와 저장하는 것이 코드도 읽기 쉬워집니다.
  • 단, 대상이 런타임에 교체되는 구조라면 캐싱 값 갱신 시점도 함께 설계해야 합니다.

짧은 예제

csharp
private Rigidbody body;

private void Awake()
{
    body = GetComponent<Rigidbody>();
}

private void FixedUpdate()
{
    body.AddForce(Vector3.forward, ForceMode.Acceleration);
}

빠른 정리

항목설명
초기 캐싱AwakeStart에서 참조 저장
반복 호출 감소프레임당 비용 누적 완화
코드 가독성의존 컴포넌트가 더 명확해짐
교체 시점 고려대상이 바뀌면 캐시도 갱신 필요
작은 비용도 누적많은 오브젝트에서 차이가 커짐

주의할 점

캐싱 자체가 목적이 되면 코드가 불필요하게 복잡해질 수 있습니다. 정말 반복되는 호출인지, 그리고 실제 병목인지 먼저 보는 편이 좋습니다.

참고 링크

2 sources