본문 바로가기

C# 프로그래밍/문법 개념

[C#] 액션과 펑션 (Action & Func)

반응형

액션과 펑션은 무엇인가?

둘의 정의부터 살펴보자.

 

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을 넘겨주거나 콜백 함수로 사용하는 것이 가장 보편적이다.

반응형