본문 바로가기
Study/C#

[C#][Study][기초다지기] Action, Func, Predicate

by 스테디코디스트 2023. 9. 25.
반응형

1. 사용 목적

- 딜리게이트 선언의 불편함을 보완

 

ex) delegate 사용

delegate void DelegateFunction(); // 이렇게 매번 선언을 해줘야 하는 불편함이 있음

static void Main(string[] args)
{
	DelegateFunction df = () => Console.WriteLine("실행");
    
    // 아래 두가지 방법 중 하나로 실행 가능
    df(); // 실행 방법 1 
    df.Invoke(); // 실행 방법 2
}

ex) Action 사용

static void Main(string[] args)
{
	Action ac = () => Console.WriteLine("실행");
    
    ac();
    ac.Invoke();
}

- 이처럼 간결하게 나타낼 수 있다.

 

2. Action<T>

- 리턴 값이 없는 딜리게이트에만 사용 가능하다.

- 매개변수는 가질 수 있다.(매개변수가 없는 형태라고 착각하지 말 것!)

ex)

static void Main(string[] args)
{
	Action<int> ac = (int value) => Console.WriteLine(value);
   
   	// Action<int> ac = (int value) => value; // 안됨
}

 

3. Func<T>

- 리턴값이 있는 딜리게이트를 대신해 사용 가능

- T 위치에 들어가는 인자들 중 마지막 인자가 리턴값을 의미하고 나머지는 매개변수 타입을 의미한다.

ex) Func<string, int, float> => string, int는 매개변수 타입을 의미, float이 리턴값을 의미

static void Main(string[] args)
{
	// 앞의 두 매개변수 n1, n2를 받아오고 n1+n2를 리턴해줌
	Func<int, int, int> AddFunc = (int n1, int n2) => n1 + n2;
}

 

4. Predicate<T>

- 리턴값으로  항상 Boolean 형을 받는 형태

- 리턴값을 굳이 명시할 필요 없고, 매개변수 타입만 명시해주면 됨

 ex)

static void Main(stirng[] args)
{
	// num이 5보다 큰 지 여부를 반환
	Predicate<int> CheckNum = (num) => num > 5;
}

cf) 참고자료

https://yeko90.tistory.com/entry/c-Action-Func-Predicate

 

[c#] Action, Func, Predicate 개념/ 차이

c# 에서는 함수를 그냥 변수에 담으려고하면 에러가 발생합니다. 이를 가능하게 해주는것이 델리게이트(delegate)입니다. (델리게이트를 모르시는 분은 해당 포스팅을 참조바랍니다.) 이 글을 읽기

yeko90.tistory.com