study/코딩

[c# 개념] Action과 Func

lucykorea414 2023. 5. 30. 22:08
728x90

우선 아래와 같이 생긴 델리게이트를 선언했다고 하자

delegate void MyDelegate<T1, T2>(T1 a, T2 b);
MyDelegate<int, int> myDelegate;

델리게이트를 선언하기 위해서는 이렇게 두줄로 선언을 해줘야 한다.

만약 무명메소드로 잠깐 사용하거나 델리게이트 형태가 많은 경우 모두 선언해줘야 하는데, 이럴대는 불편할 수 밖에 없다. 이러한 불편함을 없애기 위해서 Action과 Func delegate를 사용할 수 있다!

 

💡Action와 Func를 사용하는 경우 System namespace를 사용해야함.

 

Action과 Func의 차이는 반환하는 값이 있느냐 없느냐로 나눌 수 있다.

-> 반환값이 없을 경우(void)에는 Action을 사용하고, 반환값이 있는 경우에는 Func를 사용한다.

위에서 만든 delegate는 반환값이 없으므로 Action을 사용해서 한번 만들어보자!

Action<int, int> myDelegate2;

이런식으로 간단하게 delegate를 선언할 수 있다!

 

 

만약 반환값이 있는 delegate는 어떨까? Func로 한번 작성해보자!

delegate string MyDelegate<T1, T2>(T1 a, T2 b);
MyDelegate<int, int> myDelegate;

Func<int, int, string> myDelegate3;

이때 myDelegate와 myDelegate3은 똑같다!

이렇게 Action과 Func로 선언한 delegate들은 람다식을 이용해서 코드를 작성할 수 있다!

myDelegate3 = (int a, int b) => { int sum = a + b; return sum + "이 리턴되었습니다"; };

myDelegate3(3,5);  //결과: 8이 리턴되었습니다.
728x90