프로그래밍/C#

C#에서 델리게이트와 이벤트의 강력한 활용법

shimdh 2025. 9. 1. 09:36
728x90

C# 프로그래밍에서 델리게이트와 이벤트는 이벤트 기반 프로그래밍을 구현하는 데 필수적인 요소입니다. 이들은 메서드를 매개변수로 전달할 수 있는 유연한 방법을 제공하여 비동기 작업이나 UI 이벤트를 처리할 때 특히 유용합니다. 이번 포스트에서는 델리게이트와 이벤트의 개념을 이해하고, 이를 활용한 프로그래밍 기법을 살펴보겠습니다.

델리게이트 이해하기

델리게이트는 타입 안전한 함수 포인터로, 가리킬 수 있는 메서드의 시그니처를 정의합니다. 이는 반환 타입과 매개변수를 지정하여, 특정 메서드 호출을 캡슐화할 수 있습니다.

델리게이트 정의하기

델리게이트는 다음과 같이 정의할 수 있습니다:

public delegate void Notify(string message);
728x90

델리게이트 사용하기

델리게이트의 인스턴스를 생성하고, 그 시그니처와 일치하는 메서드를 할당할 수 있습니다.

public class ProcessBusinessLogic
{
    public void Process(int value)
    {
        // 비즈니스 로직 처리...

        // 델리게이트를 통한 알림
        Notify?.Invoke("Process completed with value: " + value);
    }

    public event Notify Notify; // 델리게이트 기반의 이벤트 선언
}

class Program
{
    static void Main(string[] args)
    {
        ProcessBusinessLogic process = new ProcessBusinessLogic();
        process.Notify += (message) => Console.WriteLine(message); // 람다 표현식을 사용한 구독

        process.Process(10); // 출력: Process completed with value: 10
    }
}

C#의 이벤트

이벤트는 델리게이트 위에 구축되어 클래스 간의 통신 방법을 제공합니다. 이벤트는 애플리케이션의 한 부분(발행자)이 다른 부분(구독자)에게 무언가가 발생했음을 알릴 수 있게 합니다.

이벤트 선언하기

C#에서 event 키워드와 델리게이트 타입을 사용하여 이벤트를 선언합니다.

public class Publisher
{
    public event Notify OnNotify;

    public void DoSomething()
    {
        OnNotify?.Invoke("Event triggered!");
    }
}

class Subscriber 
{
    public void Subscribe(Publisher publisher)
    {
        publisher.OnNotify += (message) => Console.WriteLine(message); // 람다 표현식을 사용한 구독.
    } 
}

class Program 
{ 
    static void Main() 
    { 
        Publisher pub = new Publisher(); 
        Subscriber sub = new Subscriber(); 

        sub.Subscribe(pub); 

        pub.DoSomething(); // 출력: Event triggered!
    } 
}    

람다 표현식

람다 표현식은 별도의 명명된 메서드를 명시적으로 정의하지 않고도 인라인 메서드를 작성할 수 있는 간결한 방법을 제공합니다. 이는 델리게이트나 LINQ 쿼리를 다룰 때 코드가 더 깔끔하고 읽기 쉽게 만듭니다.

람다 표현식의 문법

(parameters) => expression_or_statement_block;

델리게이트에서의 예제 사용

이벤트를 구독할 때 람다 표현식을 사용했습니다:

publisher.OnNotify += (message) => Console.WriteLine(message);

이는 알림을 처리하기 위한 별도의 메서드를 생성하는 대신 사용할 수 있는 방법입니다.

다중 매개변수 예제

람다 표현식 내에서 여러 매개변수를 사용할 수도 있습니다:

Func<int, int, int> add = (x, y) => x + y;
Console.WriteLine(add(5,3)); // 출력: 8

요약

델리게이트와 이벤트는 C#에서 프로그램의 다양한 부분이 콜백을 통해 통신할 수 있도록 하는 기본 개념입니다. 람다 표현식은 이러한 기능을 강화하여 추가적인 명명된 메서드 없이도 콜백을 간결하게 정의할 수 있게 합니다. 이들은 함께 반응형 사용자 인터페이스나 비동기 처리 기능이 필요한 견고한 애플리케이션을 개발하는 데 필수적인 구성 요소를 형성합니다.

728x90