[C#] Delegate : Action, Func
공부용으로 작성되는 페이지입니다. 틀린 부분이나 환경에 따라 오류가 발생할 수 있습니다.
지난 시간에 이어서 Delegate 관련을 공부해본다
[C#] Delegate(대리자) : Event, Lambda
공부용으로 작성되는 페이지입니다. 틀린 부분이나 환경에 따라 오류가 발생할 수 있습니다. 1. Delegate 란?'대리자' 라는 의미를 가지고 있으며 함수의 주소값을 가지고 대신 호출한다. Class, A
hungrykang.tistory.com
함수의 대리 호출을 위해서 선언하는 것은 번거로울 수 있으므로 EventHandler처럼 미리 선언된 Delegate를 사용해본다.
Delegate의 일종이므로 앞서 배웠던 체인이나 람다식도 사용할 수 있다. 이 두 가지를 사용하는 이유는 결국 코드의 간소화를 위해 사용한다고 볼 수 있다. 참고로 둘 다 using.System을 네임스페이스에 선언해주는 걸 잊지말자.
들어가기 전 결론부터 말하자면 반환해야할 값이 있는 경우 Func, 없을 경우 Action을 사용해줘야한다.
1. Action
Action은 반환타입과 매개변수가 없는 델리게이트이다.(=void) 매개 변수가 없기 때문에 제네릭 방식을 사용하여서 보완할 수 있다.
이 경우 매개변수는 0~16개까지 가질 수 있다.
ex)
Action<string, string, string,string> action;
void Start()
{
action = StringTest;
action.Invoke("Dog","Cat","Horse","Human");
}
public void StringTest(string text1, string text2, string text3, string text4)
{
Debug.Log(text1 + text2 + text3 + text4);
}
2. FUNC
Action과 유사하지만 반환 타입이 있고 매개변수가 없는 델리게이트이다. 또한 16개까지의 매개변수를 가질 수 있다.
public delegate TResult Func<out TResult>();
#Action과 달리 반환타입이 제네릭인것을 알 수 있다.
#예제: 각 플레이어에게 랜덤 아이템 부여
#아이템리스트
private string[] items = { "gun", "Trash", "Magic Card", "Book", "Switch" };
#Func<T>로 랜덤 아이템 반환
private Func<string> GetRandomItem;
void start()
{
#람다식,
#유니티 엔진에 내장된 Random.Range로 위에 작성한 아이템 리스트에서 랜덤한 Length를 불러온 뒤
#GetRandomItem에 호출한다
GetRandomItem = () => items[UnityEngine.Random.Range(0, items,Length)];
#반환된 GetRandomItem 값을 item에 저장한다.
string item = GetRandomItem();
Debug.Log(" You Get " + item);
}
참고자료
C# 프로그래밍의 기초: Action과 Func
C#의 Action과 Func는 대리자(delegate)를 사용하는 강력하고 유연한 방식을 제공합니다. 이 두 가지는 특히 람다 표현식과 함께 사용할 때 코드를 간결하고 명확하게 만들어 주며, 개발자가 보다 함수
unialgames.tistory.com