[C#] Action 델리게이트 사용법과 예제

C#에서는 델리게이트를 사용해 메서드를 캡슐화하고 다른 메서드로 전달하거나 호출할 수 있습니다. 그중에서도 Action은 매개 변수를 받아 작업을 수행하지만 값을 반환하지 않을 때 사용하는 가장 간단하고 유용한 델리게이트 중 하나입니다.

오늘은 Action<T>의 개념과 사용법을 간단하게 설명하고 예제를 살펴보도록 할게요.

Action<T>란?

Action<T>는 매개 변수가 하나이고, 반환값이 없는 메서드를 캡슐화하는 데 사용됩니다.
제네릭 형식 매개 변수를 지원하므로 어떤 데이터 유형이든 받을 수 있습니다.

// 정의
public delegate void Action<T>(T obj);

여기서 T는 메서드가 받을 매개 변수의 형식을 나타냅니다. 매개 변수가 없는 경우에는 Action(매개 변수 없이 정의된 기본형)을 사용합니다.

Action의 기본 사용법

가장 기본적인 예제로, 정수를 받아 출력하는 메서드를 Action<int> 델리게이트에 연결해 보겠습니다.

void BeomSang()
{
    // Action 델리게이트 정의
    Action<int> printNumber = PrintNumber;

    // 델리게이트 호출
    printNumber(10);
}

void PrintNumber(int number)
{
    Console.WriteLine($"Number: {number}");
}

출력 결과

Number: 10

이 코드에서 PrintNumber 메서드는 정수를 매개 변수로 받아 출력합니다. Action<int>를 사용해 printNumber 델리게이트를 정의하고, 해당 델리게이트로 메서드를 호출했습니다.

람다 식을 활용한 간결한 표현

람다 식을 사용하면 Action 델리게이트를 더 간단하게 정의할 수 있습니다. 특히 간단한 작업을 수행할 때 코드의 가독성을 높이는 데 유용합니다.

void BeomSang()
{
    // 람다 식을 사용한 Action 정의
    Action<string> greet = name => Console.WriteLine($"Hello, {name}!");

    // 델리게이트 호출
    greet("BeomSang");
}

출력 결과

Hello, BeomSang!

여기서는 문자열을 매개 변수로 받아 인사 메시지를 출력하는 Action<string> 델리게이트를 정의했습니다. 람다 식 name => Console.WriteLine($"Hello, {name}!")을 사용해 코드가 더 간결해졌어요.

여러 Action 델리게이트 연결

여러 Action 델리게이트를 하나로 묶어 순차적으로 실행할 수도 있습니다. (델리게이트 체인) 이를 통해 여러 작업을 동시에 처리할 수 있어요.

void BeomSang()
{
    // Action 델리게이트 정의
    Action<int> action1 = x => Console.WriteLine($"Action 1: {x * 2}");
    Action<int> action2 = x => Console.WriteLine($"Action 2: {x * 3}");

    // 델리게이트 연결
    Action<int> combinedAction = action1 + action2;

    // 연결된 델리게이트 호출
    combinedAction(5);
}

출력 결과

Action 1: 10
Action 2: 15

여기서는 두 개의 Action<int> 델리게이트를 연결해 입력값을 각각 두 배와 세 배로 계산 후 출력했습니다. + 연산자를 사용해 델리게이트를 조합하면 두 작업이 순차적으로 실행됩니다.

예제

Action<T>는 이벤트 처리, 데이터 반복, 로깅, 또는 작업 파이프라인을 구성하는 등 다양한 곳에 응용할 수 있습니다.
예를 들어, 컬렉션의 각 요소에 대해 특정 작업을 수행하고 싶을 때 유용합니다.

void BeomSang()
{
    List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

    // 컬렉션의 각 요소에 대해 작업 수행
    Action<int> processNumber = n => Console.WriteLine($"Processing number: {n}");
    numbers.ForEach(processNumber);
}

출력 결과

Processing number: 1
Processing number: 2
Processing number: 3
Processing number: 4
Processing number: 5

여기서는 List<T>ForEach 메서드와 함께 Action<int>를 사용해 리스트의 각 요소를 처리했습니다.

요약

  • Action<T>는 값을 반환하지 않는 메서드를 캡슐화할 때 유용합니다.
  • 람다 식과 조합하면 간결하고 읽기 쉬운 코드를 작성할 수 있습니다.
  • 여러 Action을 연결하거나 컬렉션과 함께 사용해 다양한 작업에 활용할 수 있습니다.

Action<T>는 간단하면서도 강력한 기능을 제공해요. 특히, 명시적인 반환값이 필요하지 않고 특정 작업만 수행할 때, 코드를 효율적으로 작성할 수 있는 훌륭한 도구랍니다.

이전최근
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗