[Unity] delegate, Action, Func

Jihoon·2023년 2월 14일

delegate

델리게이트는 대리자라는 뜻으로, 메소드에 대한 참조 변수를 만들기 위해 사용한다.
이를 통하여 메소드를 매개변수로 넘겨 줄 수 있다.

사용법

delegate int MyDelegate(int a, int b)
int Plus(int a, int b)
{
    return a + b;
}

void Start() 
{
	MyDelegate del = Plus;
    print(del(1, 2));
}     

앞서 포스팅한 람다식을 사용하여

MyDelegate Plus = (int a, int b) => return a + b;

이런식으로도 사용 가능하다.

Action, Func

Action과 Func은 C# 버전이 올라가면서 편의성을 위해 프로그래머가 일일이 delegate를 정의하지 않아도 되게 C# 내부적으로 정의하고 있는 대리자이다. 때문에 사용자가 delegate를 작성하지 않고도 바로 메소드를 참조할 수 있다.

Action은 인자만 존재하는 delegate, func은 인자와 결과 값이 모두 존재하는 delegate이다.

기존 delegate 사용

delegate int MyDelegate(int a, int b)

int Plus(int a, int b)
{
    return a + b;
}

void Start() 
{
	MyDelegate del = Plus;
    print(Plus(3, 5));
}     

Action, Func 사용

void Plus_Action(int a, int b)
{
    print(a + b);
}
int Plus_Func(int a, int b)
{
    return a + b;
}
void Start() 
{
	Action<int, int> act = Plus_Action;
	Func<int, int, int> func = Plus_Func;
    act(1, 2);
    print(func(2, 3));
}     

Func

Func는 반드시 리턴 타입이 존재한다.

리턴 타입은 Generic 폼 내에, 즉 템플린 파라미터 안에 존재한다. <>안에 들어있는 n개의 형식 중 마지막은 출력 형식이고 나머지는 입력 형식이다.

따라서 람다식의 왼쪽에는 n-1개의 변수가 들어가고 오른쪽에는 1개의 반환값이 들어간다.

Func func<int, int> = (int a) => return a;

Action

Action은 Func와 다르게 리턴 타입이 존재하지 않는다.

Action action<int> = (int a) => print(a);
profile
유니티 클라이언트 개발자

0개의 댓글