Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Func 델리게이트 vs Action 델리게이트: 핵심 차이점 완벽 정리

델리게이트(delegate)는 특정 매개변수 목록과 반환 타입을 가진 메서드에 대한 참조를 나타내는 타입입니다. 델리게이트를 인스턴스화하면, 호환되는 시그니처와 반환 타입을 가진 어떤 메서드든 해당 인스턴스와 연결할 수 있으며, 델리게이트 인스턴스를 통해 그 메서드를 호출할 수 있습니다.

Func 델리게이트란?

Func는 System 네임스페이스에 포함된 제네릭 델리게이트입니다. 0개 이상의 입력 매개변수와 하나의 출력(반환) 매개변수를 가지며, 항상 마지막 매개변수가 출력 매개변수로 간주됩니다. 즉, Func 델리게이트는 최대 16개의 매개변수를 받아 값을 반환하는 메서드를 가리킬 수 있습니다.

다음은 두 개의 입력 매개변수와 하나의 출력 매개변수를 가지는 Func 델리게이트 선언 예시입니다.

Func<string, string, string> Append;

Func 예제

using System;
namespace DemoApplication {
    class Program {
        static void Main(string[] args) {
            Func<string, string, string> func = Append;
            string fullName = func("Michael", "Jackson");
            Console.WriteLine(fullName);
            Console.ReadLine();
        }
        static string Append(string firstName, string lastName) {
            return firstName + lastName;
        }
    }
}

실행 결과

MichaelJackson

Action 델리게이트란?

Action 역시 System 네임스페이스에 정의된 델리게이트 타입입니다. Action 델리게이트는 Func 델리게이트와 거의 동일하지만, 값을 반환하지 않는다는 점이 결정적인 차이입니다.换句话说, Action 델리게이트는 반환 타입이 void인 메서드와 함께 사용됩니다. 최소 1개부터 최대 16개까지의 입력 매개변수를 가질 수 있으며, 출력 매개변수는 포함하지 않습니다.

다음은 두 개의 입력 매개변수를 가지는 Action 델리게이트 선언 예시입니다.

Action<string, string> Print;

Action 예제

using System;
namespace DemoApplication {
    class Program {
        static void Main(string[] args) {
            Action<string, string> func = AppendPrint;
            func("Michael", "Jackson");
            Console.ReadLine();
        }
        static void AppendPrint(string firstName, string lastName) {
            string fullName = firstName + lastName;
            Console.WriteLine($"{fullName}");
        }
    }
}

실행 결과

위 코드의 실행 결과는 다음과 같습니다.

MichaelJackson

정리: Func와 Action의 차이점

두 델리게이트의 핵심 차이를 요약하면 다음과 같습니다.

  • Func: 하나 이상의 입력 매개변수를 받고 반드시 값을 반환합니다. 마지막 타입 매개변수가 반환 타입입니다.
  • Action: 입력 매개변수만 받고 값을 반환하지 않습니다(void). 람다식이나 메서드 참조와 함께 자주 사용됩니다.