[C#] Invoke()와 Invoke()

박현민·2024년 12월 23일

유니티

목록 보기
1/6
post-thumbnail

C# Invoke()Unity Invoke()의 차이

우리가 C#으로 코드를 짤 때 Invoke() 라는 매서드를 자주 사용하게 된다.

특히 Unity를 사용하는 개발자라면 MonoBehaviour.Invoke() 를 사용하게 된다.

둘 다 “어떤 매서드를 실행한다” 라는 공통점이 있지만, 실제 동작 방식과 목적은 다르다.

C#의 Invoke()


C#의 Action.Invoke() 는 C#에서 델리게이트(Delegate)를 통해 매서드를 호출하는 기능을 제공한다.

Action.Invoke()의 특징

  • 즉시 실행: Invoke() 를 호출하면 호출된 매서드가 즉시 실행된다.
  • 델리게이트 전용: Invoke()Action , Func 또는 사용자 정의 델리게이트 등에서 사용된다.
  • Null 예외 방지: 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의 Invoke()


Unity의 MonoBehaviour.Invoke() 는 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! 출력

두 Invoke()의 차이


특성C#의 Action.Invoke()Unity의 MonoBehaviour.Invoke()
목적델리게이트를 통해 메서드를 즉시 호출특정 메서드를 일정 시간 후 실행
호출 방식델리게이트 객체의 참조를 통해 호출문자열로 메서드 이름을 전달
지연 실행 지원지원하지 않음지원 (딜레이 설정 가능)
사용 가능한 환경모든 C# 환경에서 사용 가능Unity의 MonoBehaviour에서만 사용 가능
Null 체크 필요 여부?.Invoke()로 Null 체크 가능Null 체크 필요하지 않음
예외 발생 가능성델리게이트가 null일 경우 예외 발생 가능메서드 이름이 잘못되면 실행되지 않음
profile
자라고 있는 게임개발자

0개의 댓글