C#/프로그래밍 고급

C# 프로그래밍 고급 - 08. 델리게이터 종류

tita 2024. 5. 30. 16:54

자주 사용되는 .NET에서 제공되는 델리게이터가 있습니다. Func 델리게이터와 Action 델리게이터에 대해 알아보겠습니다

 

 

[Func 델리게이터]

Func 델리게이터는 .NET에서 제공하는 일반 델리게이터로, 입력 매개변수를 받아 결과를 반환하는 메서드를 참조할 수 있도록 합니다.

Func 델리게이터는 0개부터 16개까지의 입력 매개변수를 받을 수 있으며, 마지막 형식 매개변수는 항상 반환 형식을 나타냅니다.

 

 

<Func 델리게이터의 기본 형태>

  • Func<TResult>: 매개변수가 없고, TResult를 반환합니다.
  • Func<T1, TResult>: 하나의 매개변수 T1을 받고, TResult를 반환합니다.
  • Func<T1, T2, TResult>: 두 개의 매개변수 T1과 T2를 받고, TResult를 반환합니다.
  • ...
  • Func<T1, ..., T16, TResult>: 최대 16개의 매개변수를 받고, TResult를 반환합니다.

 

 

<매개변수가 없는 Func>

using System;

class Program
{
    static void Main(string[] args)
    {
        // Func 델리게이터: 매개변수가 없고 int를 반환
        Func<int> getRandomNumber = () => new Random().Next(1, 101);

        // 람다식을 호출하여 결과 출력
        int result = getRandomNumber();
        Console.WriteLine(result);  // 출력: 1부터 100 사이의 임의의 숫자
    }
}

 

 

 

<매개변수가 하나인 Func>

using System;

class Program
{
    static void Main(string[] args)
    {
        // Func 델리게이터: string을 받아 int를 반환
        Func<string, int> getLength = str => str.Length;

        // 람다식을 호출하여 결과 출력
        int length = getLength("Hello, World!");
        Console.WriteLine(length);  
    }
}

/*
[실행 결과]
13
*/

 

 

<매개변수가 두 개인 Func>

using System;

class Program
{
    static void Main(string[] args)
    {
        // Func 델리게이터: 두 개의 int를 받아 int를 반환
        Func<int, int, int> add = (a, b) => a + b;

        // 람다식을 호출하여 결과 출력
        int result = add(3, 4);
        Console.WriteLine(result);  // 출력: 7
    }
}

/*
[실행 결과]
7
*/

 

Func 델리게이터를 정리해보면

  • Func 델리게이터는 하나 이상의 입력 매개변수를 받고, 결과를 반환하는 메서드를 참조할 수 있습니다.
  • 마지막 형식 매개변수는 반환 형식을 나타내며, 최대 16개의 입력 매개변수를 가질 수 있습니다.
  • 사용 예제: Func 델리게이터는 다양한 입력 매개변수와 반환 형식을 가진 메서드를 람다식이나 메서드 참조로 간결하게 표현할 수 있도록 합니다.

 

 

 

[Action 델리게이터]

Action 델리게이터는 .NET에서 제공하는 델리게이터로, 매개변수를 받지 않고 반환값이 없는 메서드를 참조할 수 있도록 합니다. 즉, Action 델리게이터는 입력 매개변수를 받지 않고 void를 반환하는 메서드를 참조할 수 있습니다.

 

 

<Action 델리게이터의 기본 형태>

  • Action: 매개변수가 없고, 반환값이 없는 메서드를 참조합니다.
  • Action<T1>: 하나의 매개변수 T1를 받고, 반환값이 없는 메서드를 참조합니다.
  • Action<T1, T2>: 두 개의 매개변수 T1과 T2를 받고, 반환값이 없는 메서드를 참조합니다.
  • ...
  • Action<T1, ..., T16>: 최대 16개의 매개변수를 받고, 반환값이 없는 메서드를 참조합니다.

 

 

<매개변수가 없는 Action>

using System;

class Program
{
    static void Main(string[] args)
    {
        // Action 델리게이터: 매개변수가 없는 메서드를 참조
        Action sayHello = () => Console.WriteLine("Hello, World!");

        // 메서드 호출
        sayHello();  
    }
}

/*
[실행 결과]
Hello, World!
*/

 

 

<매개변수가 하나인 Action>

using System;

class Program
{
    static void Main(string[] args)
    {
        // Action 델리게이터: int를 받는 메서드를 참조
        Action<int> printNumber = num => Console.WriteLine(num);

        // 메서드 호출
        printNumber(10); 
    }
}

/*
[실행 결과]
10
*/

 

 

 

<매개변수가 두 개인 Action>

using System;

class Program
{
    static void Main(string[] args)
    {
        // Action 델리게이터: 두 개의 int를 받는 메서드를 참조
        Action<int, int> calculateSum = (a, b) => Console.WriteLine("Sum: " + (a + b));

        // 메서드 호출
        calculateSum(3, 4);  
    }
}

/*
[실행 결과]
7
*/

 

Action 델리게이터를 정리해보면

  • Action 델리게이터는 매개변수를 받지 않고 반환값이 없는 메서드를 참조할 수 있습니다.
  • 매개변수의 개수에 따라 다양한 형태의 Action 델리게이터를 사용할 수 있습니다.
  • 사용 예제: Action 델리게이터는 주로 콜백 메서드, 이벤트 핸들러, 비동기 작업 등에서 사용됩니다.

 

 

[Func 델리게이터와 Action 델리게이터의 차이점]

 

  • Func 델리게이터는 반환 값을 가지며, Action 델리게이터는 반환 값을 가지지 않습니다.
  • 두 델리게이터 모두 메서드의 매개변수를 나타내지만, Action은 반환형이 없는 메서드를 참조할 때 사용됩니다.
  • 따라서, Func는 반환형을 지정할 때 사용하고, Action은 반환형이 없는 경우에 사용됩니다.