빠른 흐름
매 frame 필요 없으면
-> Update를 만들지 않는다
상태 변화 시에만 필요하면
-> event / callback
대상이 아주 많으면
-> 중앙 Update Manager
순차 대기 흐름이면
-> Coroutine기본 흐름
빈 메시지 함수가 쌓이는 이유와 비용
Unity는 MonoBehaviour에 정의된 메시지 함수를 엔진 라이프사이클에 따라 검사하고 호출합니다. 그래서 Update, FixedUpdate, LateUpdate가 실제로 아무 일도 하지 않더라도, 함수가 존재하는 수가 많아질수록 프레임마다 관리해야 할 대상이 늘어납니다. 작은 프로젝트에서는 체감이 약할 수 있지만, 수천 개의 에이전트가 있는 구조에서는 이 비용이 무시하기 어렵습니다. 핵심은 "한 함수 호출이 비싸다"보다 "작은 호출 비용이 매우 많이 반복된다"는 데 있습니다.
사용하지 않는 함수는 아예 제거하기
사용하지 않는 메시지 함수는 빈 채로 두지 말고 아예 제거하는 편이 좋습니다. 특히 습관처럼 Update 템플릿을 만들어 두고 나중에 쓰지 않는 경우가 누적되면, 코드 가독성과 성능 둘 다 손해를 봅니다. FixedUpdate와 LateUpdate도 물리 타임스텝과 후처리 보정이라는 정확한 역할이 있을 때만 써야 합니다. 메시지 함수 선택은 문법 취향이 아니라 호출 빈도와 책임 분리의 문제입니다.
상황별 더 나은 대안
상태가 바뀔 때만 반응하면 되는 UI나 시스템은 event 기반이 더 낫습니다. 아주 많은 객체를 갱신해야 하면 Update Manager 같은 중앙 순회 구조가 효과적이고, 순차적으로 대기하며 이어지는 흐름은 Coroutine이 더 읽기 쉬운 경우가 많습니다. 아래 예시처럼 체력바가 변경됐을 때만 반응하면 된다면 Update 없이 이벤트 구독만으로 충분합니다.
public sealed class HealthBar : MonoBehaviour
{
private void OnEnable()
{
health.Changed += Refresh;
}
private void OnDisable()
{
health.Changed -= Refresh;
}
}체크포인트
| 상황 | 더 나은 선택 |
|---|---|
| 매 frame 계속 관측해야 함 | Update |
| 물리 step에 맞춰야 함 | FixedUpdate |
| 다른 이동 뒤 최종 보정 | LateUpdate |
| 상태 변화 때만 반응 | event / callback |
| 순차 대기 흐름 | Coroutine |
| 수많은 대상 갱신 | 중앙 Update Manager |
| 문제 성격 | 더 맞는 방식 | 이유 |
|---|---|---|
| 매 프레임 폴링이 정말 필요함 | Update 유지 | 상태 변화 시점 자체를 알 수 없음 |
| 값이 바뀔 때만 반응하면 됨 | event / callback | 빈 함수 호출을 제거할 수 있음 |
| 일정 시간 대기 후 이어짐 | Coroutine | 상태 머신보다 읽기 쉬운 경우가 많음 |
| 수백~수천 대상 반복 갱신 | 중앙 매니저 | 엔진 메시지 호출 수를 줄이기 쉬움 |
주의할 점
빈 Update는 조용히 매 프레임 호출됩니다. 사용하지 않는 메시지 함수는 즉시 제거하세요.
// ❌ 아무 작업도 없는 빈 Update가 매 프레임 호출됨
private void Update() { }
// ✅ 상태 변화 때만 반응하면 event로 충분
private void OnEnable() => health.Changed += Refresh;
private void OnDisable() => health.Changed -= Refresh;Update를 없앤다고 무조건 나아지는 건 아닙니다. 이벤트가 거의 계속 발생하거나 순서 보장이 중요하면, 억지로 event만 쓰는 쪽이 더 복잡해질 수 있습니다.
// ❌ 매 프레임 필요한 조준 보정을 event로만 해결 시도
입력 변화 event
카메라 변화 event
타깃 변화 event
→ 실제론 매 프레임 재계산이 더 단순
// ✅ 필요 빈도에 따라 선택
항상 추적: Update
가끔 상태 변화: event
순차 대기: Coroutine참고 링크
3 sources