프로그램에서 하나의 동작이 여러 곳에 영향을 줘야 할 때, 각 기능을 직접 호출하는 방식은 코드 간의 의존성을 높이고 유지보수를 어렵게 만듭니다.
이를 해결하기 위해 C#에서는 델리게이트와 이벤트 기반 구조를 통해 느슨하게 연결된 호출 방식을 제공합니다.
Invoke는 이러한 구조에서 등록된 여러 함수를 한 번에 실행하는 역할을 합니다.
즉, 하나의 이벤트가 발생했을 때, 이를 구독하고 있는 모든 로직에게 “지금 실행하라”는 신호를 보내는 방식입니다.
예를 들어 게임에서 특정 상태가 변경되었을 때, UI 갱신, 사운드 재생, 이펙트 출력이 동시에 필요할 수 있습니다.
이때 각 기능을 직접 호출하는 대신, 이벤트를 Invoke로 실행하면 관련된 모든 시스템이 같은 신호에 반응하게 됩니다.
이러한 방식은
기능 간 결합도를 낮추고,
새로운 반응 로직을 추가하더라도 기존 코드를 수정하지 않아도 된다는 장점이 있습니다.
결과적으로 Invoke는
하나의 상태 변화가 여러 시스템으로 자연스럽게 전달되도록 만드는 핵심적인 실행 메커니즘이라고 볼 수 있습니다.
아래 예시는 “피버 타임이 시작되었을 때” UI와 사운드가 동시에 반응하는 구조입니다.
public event Action<bool> OnFeverChanged;
void StartFever()
{
OnFeverChanged?.Invoke(true);
}
void Start()
{
OnFeverChanged += ShowFeverUI;
OnFeverChanged += PlayFeverSound;
}
void ShowFeverUI(bool isOn)
{
Debug.Log("피버 UI 표시");
}
void PlayFeverSound(bool isOn)
{
Debug.Log("피버 사운드 재생");
}