본문 바로가기
Programming/C#

C# 델리게이트(Delegate)의 다양한 사용법

by Dev_카페인 2024. 6. 9.
반응형

[C#] 델리게이트(Delegate)의 다양한 사용법

안녕하세요! 이번 포스트에서는 C#의 델리게이트(Delegate)에 대해 다양한 사용법을 중심으로 알아보겠습니다. 델리게이트는 메서드를 참조할 수 있는 형식으로, 이벤트 처리, 콜백 메서드, 비동기 프로그래밍 등 다양한 시나리오에서 활용됩니다.

델리게이트의 기본 개념

델리게이트는 메서드의 참조를 캡슐화하는 형식입니다. 델리게이트를 사용하면 메서드를 다른 메서드에 전달하거나, 런타임에 메서드를 동적으로 변경할 수 있습니다.

델리게이트 선언

public delegate void MyDelegate(int x, int y);​

위 예시에서 MyDelegate는 두 개의 int 매개변수를 가지며 void를 반환하는 메서드를 참조할 수 있는 델리게이트입니다.

델리게이트의 사용법

1. 기본 사용법

델리게이트는 특정 메서드를 참조하고, 그 메서드를 호출할 수 있습니다.

public delegate void MyDelegate(int x, int y);

public class Program
{
    static void Main(string[] args)
    {
        MyDelegate del = new MyDelegate(Add);
        del(10, 20); // Output: 30
    }

    static void Add(int a, int b)
    {
        Console.WriteLine(a + b);
    }
}

위 예시에서 MyDelegate는 Add 메서드를 참조하고, del(10, 20)를 통해 Add 메서드를 호출합니다.

2. 멀티캐스트 델리게이트

델리게이트는 여러 메서드를 호출할 수 있는 멀티캐스트 기능을 제공합니다.

public delegate void MyDelegate(int x, int y);

public class Program
{
    static void Main(string[] args)
    {
        MyDelegate del = new MyDelegate(Add);
        del += Subtract;

        del(10, 20); // Output: 30, -10
    }

    static void Add(int a, int b)
    {
        Console.WriteLine(a + b);
    }

    static void Subtract(int a, int b)
    {
        Console.WriteLine(a - b);
    }
}

위 예시에서 del 델리게이트는 Add와 Subtract 메서드를 모두 호출합니다.

3. 익명 메서드와 람다 식

델리게이트는 익명 메서드나 람다 식을 사용하여 간결하게 메서드를 정의할 수 있습니다.

public delegate void MyDelegate(int x, int y);

public class Program
{
    static void Main(string[] args)
    {
        MyDelegate del = delegate (int a, int b)
        {
            Console.WriteLine(a + b);
        };

        del(10, 20); // Output: 30

        MyDelegate del2 = (a, b) => Console.WriteLine(a * b);
        del2(10, 20); // Output: 200
    }
}

위 예시에서 익명 메서드와 람다 식을 사용하여 델리게이트를 정의하고 호출합니다.

4. Func, Action, Predicate 델리게이트

C#은 미리 정의된 델리게이트 형식인 Func, Action, Predicate를 제공합니다.

  • Func: 반환 값을 가지는 델리게이트.
  • Action: 반환 값이 없는 델리게이트.
  • Predicate: 특정 조건을 검사하여 불리언 값을 반환하는 델리게이트.
class Program
{
    static void Main(string[] args)
    {
        Func<int, int, int> add = (a, b) => a + b;
        Console.WriteLine(add(10, 20)); // Output: 30

        Action<string> print = message => Console.WriteLine(message);
        print("Hello, World!"); // Output: Hello, World!

        Predicate<int> isEven = num => num % 2 == 0;
        Console.WriteLine(isEven(10)); // Output: True
    }
}

위 예시에서 Func, Action, Predicate 델리게이트를 사용하여 메서드를 정의하고 호출합니다.

델리게이트의 활용 사례

1. 이벤트 처리

델리게이트는 이벤트를 처리하는 데 주로 사용됩니다. 이벤트는 델리게이트를 기반으로 정의되며, 이벤트 발생 시 호출할 메서드를 등록할 수 있습니다.

public delegate void MyEventHandler(string message);

public class Publisher
{
    public event MyEventHandler MyEvent;

    public void RaiseEvent(string message)
    {
        MyEvent?.Invoke(message);
    }
}

public class Subscriber
{
    public void OnEventRaised(string message)
    {
        Console.WriteLine($"Event received: {message}");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Publisher publisher = new Publisher();
        Subscriber subscriber = new Subscriber();

        publisher.MyEvent += subscriber.OnEventRaised;
        publisher.RaiseEvent("Hello, Events!"); // Output: Event received: Hello, Events!
    }
}

위 예시에서 Publisher 클래스는 MyEvent라는 이벤트를 정의하고, 이벤트가 발생할 때 OnEventRaised 메서드를 호출합니다.

2. 콜백 메서드

델리게이트는 콜백 메서드를 구현하는 데 유용합니다. 콜백 메서드는 특정 작업이 완료된 후 호출되는 메서드입니다.

public delegate void CallbackDelegate(string message);

public class Processor
{
    public void Process(CallbackDelegate callback)
    {
        // Some processing logic
        callback("Processing completed.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Processor processor = new Processor();

        processor.Process(result => Console.WriteLine(result)); // Output: Processing completed.
    }
}

위 예시에서 Process 메서드는 콜백 델리게이트를 받아서 작업이 완료된 후 콜백을 호출합니다.

마치며

이번 포스트에서는 C#의 델리게이트(Delegate)에 대해 다양한 사용법을 알아보았습니다. 델리게이트는 메서드를 참조할 수 있는 형식으로, 이벤트 처리, 콜백 메서드, 비동기 프로그래밍 등 다양한 시나리오에서 활용됩니다. 델리게이트를 적절히 활용하면 코드의 유연성을 높이고, 모듈화된 코드를 작성할 수 있습니다. 추가적인 질문이나 궁금한 점이 있다면 언제든지 댓글로 남겨주세요!

반응형