반응형
액션과 펑션은 무엇인가?
둘의 정의부터 살펴보자.
C# 공식 문서에 따르면,
Action "매개 변수가 하나이고 값을 반환하지 않는 메서드를 캡슐화한다 "
public delegate void Action<in T>(T obj);
Func "매개 변수가 하나이고 TResult매개 변수에 지정된 형식의 값을 반환하는 메서드를 캡슐화한다"라고 되어있다.
public delegate TResult Func<in T,out TResult>(T arg);
다시 말해 두 개는 모두 대리자(delegate)이며 차이점은 반환 값이 있느냐 혹은 없느냐라는 것이다.
왜 사용하는가?
액션과 펑션은 모두 System 네임스페이스에 포함되어있는 델리게이트이다. 이것들은 .Net Framework가 미리 선언을 해서 타입을 정해 놓았기 때문에 때문에 프로그래머의 수고를 덜어준다는 장점이 있다.
어떻게 사용하는가?
기본적으로 둘 모두 델리게이트이기 때문에 사용방법은 델리게이트 사용방법과 같다.
다음 예제 코드를 보자.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
//System 네임스페이스를 사용해주어야 한다.
public class Test0401 : MonoBehaviour
{
public Action<int, int> myAction;
public Func<int, bool> myFunc;
void Start()
{
myAction += Plus;
myAction += Minus;
myAction.Invoke(15, 9);
//델리게이트 체인이 당연히 가능하다.
myFunc += IsBiggerThan5;
myFunc.Invoke(8);
}
public void Plus(int a, int b)
{
Debug.Log("a + b = " + (a + b));
}
public void Minus(int a, int b)
{
Debug.Log("a - b = " + (a - b));
}
public bool IsBiggerThan5(int a)
{
return a > 5;
}
}
Action과 Func 모두 System을 using 해주어야만 사용할 수 있다. 둘 모두 대리자와 마찬가지로 Invoke를 사용해 실행할 수 있다.
추가적으로 Action과 Func를 사용하여 List<T>를 제작한 것이 있다.
유니티에서 어떻게 활용할 수 있는가?
Unity에서의 가장 큰 사용법은 델리게이트의 사용법과 비슷하다. 매개변수로써 Action이나 Func을 넘겨주거나 콜백 함수로 사용하는 것이 가장 보편적이다.
반응형
'C# 프로그래밍 > 문법 개념' 카테고리의 다른 글
[C#] 다형성 (Polymorphism) (0) | 2022.05.08 |
---|---|
[C#] 인터페이스 (Interface) (0) | 2022.05.05 |
[C#] 델리게이트 (Delegate) (0) | 2022.05.04 |
[C#] 직렬화 (Serialization) (0) | 2022.05.03 |
[C#] 구조체와 클래스 (Struct & Class) (0) | 2022.05.03 |