본문 바로가기

C#

C# - Func 과 Action

2021.12.20

- 공부를 위해 https://scvtwo.tistory.com/52글을 참고하여 공부했습니다-

 

[C#] Action, Func

안녕하세요. 개발남입니다. 알기 쉬운 C# Action, Func입니다. 델리게이트를 생성하기 위해 필요한 델리게이트 형태에 맞춰서 미리 선언해줘야하는데, 만약 무명 메소드로 잠깐 사용하거나

scvtwo.tistory.com

 

유니티를 위한 기본 문법 C# 기초문법 Action과 Func입니다. Action은 리턴타입과 매개변수가 없는 함수의 등록을 위한 델리게이트 라고 정의되어 있습니다. using System을 해주어야 사용이 가능합니다. Func 매개 변수를 0~16개를 가질 수 있는 값을 반환하는 메서드를 등록할수 있습니다.

 

학교 교과수업 C#프로그래밍에서 Func을 사용하는 예제가 나왔었습니다. 그때 Func에 매개변수에 타입 T를 받는데 분명 2개를 받는데 Func<int,int,int> 3개를 받는줄 알고 깜짝 놀랐습니다. 그래서 찾아보며 공부한 결과 Func의 마지막 매개변수 타입은 반환받는 타입이란 것을 알게되었습니다. 한마디로 int형 변수 2개와 연산 값을 int형으로 받는다는 소리입니다. 예제코드를 살펴보도록 하겠습니다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    delegate void DelegateParameterTwo(int n1, int n2);
 
    class Program
    {
        static void Main(string[] args)
        {
            Func<int> value = () => 2+8;
            Console.WriteLine(value());
            Func<int, int, int> plus = (n1, n2) => n1 + n2;    
            Console.WriteLine(plus(2, 7));
            Func<int, int, float> minus = (n1, n2) => n1 * n2 * 0.5f; 
            Console.WriteLine(minus(6, 7));
        }
    }
}

 

 

코드에서 보면 Func은 매개변수 2개를 받고 마지막에 int형 반환타입이 하나더 들어가 있는 모습입니다. 바로 아랫줄 처럼 2와 7을 넣어주면 람다식에 연산에 의해 int값 9로 출력이 됩니다. 이렇게 Func은 마지막에 리턴 즉, 반환 값이 있다는 것이 Action과 차이점 입니다. 

 

Action은 <매개변수 타입> 만 받습니다. Func과 달리 반환타입이 없습니다. <매개변수 타입>만을 받고 람다식으로 편하게 표현할수 있다는 장점이 있습니다. 아래 예제 코드를 보시면 Action의 활용예제입니다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
 
    class Program
    {
        static void Main(string[] args)
        {
            Action output1 = () => Console.WriteLine("A");
            output1();
 
            Action<int> output2 = (v) => Console.WriteLine(v);
            output2(2);
        }
    }
}

 

다음 글에서는 Action과 Func을 활용한 Living Entity(상태이상 관리 객체) 에 대해 Action과 Func을 사용하며 심화적으로 다뤄보도록 하겠습니다.