C# Invoke()와Unity Invoke()의 차이
우리가 C#으로 코드를 짤 때 Invoke() 라는 매서드를 자주 사용하게 된다.
특히 Unity를 사용하는 개발자라면 MonoBehaviour.Invoke() 를 사용하게 된다.
둘 다 “어떤 매서드를 실행한다” 라는 공통점이 있지만, 실제 동작 방식과 목적은 다르다.
C#의 Action.Invoke() 는 C#에서 델리게이트(Delegate)를 통해 매서드를 호출하는 기능을 제공한다.
Invoke() 를 호출하면 호출된 매서드가 즉시 실행된다.Invoke() 는 Action , Func 또는 사용자 정의 델리게이트 등에서 사용된다.Action?.Invoke() 구문을 사용하여 안전하게 null 체크를 하며 실행할 수 있다.예시 코드
using UnityEngine;
public class Example : MonoBehaviour
{
Action greet;
private void Awake()
{
greet = () => Debug.Log("Hello World!");
}
private void Start()
{
greet?.Invoke();
}
}
// Hello World! 출력
Unity의 MonoBehaviour.Invoke() 는 Unity 엔진에서 제공되는 특별한 매서드로, 특정 매서드를 지연 호출 하기 위해서 사용된다.
MonoBehaviour을 상속한 클래스 내에서만 사용할 수 있다.예시 코드
using UnityEngine;
public class Example : MonoBehaviour
{
private void Start()
{
Invoke("DelayedMethod", 2f); // 2초 뒤에 DelayedMethod 실행
}
private void DelayedMethod()
{
Debug.Log("Hello World!");
}
} // 2초 뒤에 Hello World! 출력
| 특성 | C#의 Action.Invoke() | Unity의 MonoBehaviour.Invoke() |
|---|---|---|
| 목적 | 델리게이트를 통해 메서드를 즉시 호출 | 특정 메서드를 일정 시간 후 실행 |
| 호출 방식 | 델리게이트 객체의 참조를 통해 호출 | 문자열로 메서드 이름을 전달 |
| 지연 실행 지원 | 지원하지 않음 | 지원 (딜레이 설정 가능) |
| 사용 가능한 환경 | 모든 C# 환경에서 사용 가능 | Unity의 MonoBehaviour에서만 사용 가능 |
| Null 체크 필요 여부 | ?.Invoke()로 Null 체크 가능 | Null 체크 필요하지 않음 |
| 예외 발생 가능성 | 델리게이트가 null일 경우 예외 발생 가능 | 메서드 이름이 잘못되면 실행되지 않음 |