C#

대리자(Delegate)와 이벤트(Event) 처리

Juan_ 2023. 3. 8. 22:45

대리자(Delegate)

C#에서 대리자(Delegate)다른 메서드를 참조하는 데이터 형식입니다. 대리자는 메서드를 참조하기 위해 사용되며, 대리자가 참조하는 메서드를 대신 호출할 수 있습니다. 대리자는 이벤트 처리, 비동기 처리, 콜백 등과 같은 기능을 구현하는 데 매우 유용합니다.

 

예시 코드 : 

// 예시 코드
// 대리자 선언
public delegate int Calculate(int x, int y);

public class Calculator
{
    // 더하기 메서드
    public int Add(int x, int y)
    {
        return x + y;
    }

    // 빼기 메서드
    public int Subtract(int x, int y)
    {
        return x - y;
    }
}

public class Program
{
    static void Main(string[] args)
    {
        Calculator calculator = new Calculator();

        // 더하기 메서드를 참조하는 대리자 생성
        Calculate operation = new Calculate(calculator.Add);

        // 대리자를 사용하여 더하기 메서드 호출
        int result = operation(5, 10);

        Console.WriteLine(result);
    }
}

 

위 예시 코드에서는 대리자를 사용하여 더하기 메서드를 참조하고 호출하는 방법을 보여줍니다. 대리자는 더하기 메서드를 참조하기 위해 선언되고, 이 메서드를 대신 호출할 대리자를 생성합니다. 이러한 방법을 사용하여 대리자를 통해 메서드를 호출하면 메서드를 직접 호출하는 것보다 더욱 유연하게 동작할 수 있습니다.


이벤트(Event)

C#에서 이벤트(Event)는 객체 간의 상호 작용에서 발생하는 사건을 나타내는 기능입니다. 이벤트는 객체에서 발생하며, 이벤트를 처리하는 메서드를 이벤트 핸들러(Event Handler)라고 합니다. 이벤트 핸들러는 이벤트 발생 시 호출되어 처리합니다.

 

예시 코드 :

// 예시 코드
// 버튼 클래스
public class Button
{
    // Click 이벤트 선언
    public event EventHandler Click;

    // Click 이벤트 발생 시 호출되는 메서드
    public void OnClick()
    {
        // 이벤트 핸들러 호출
        Click?.Invoke(this, EventArgs.Empty);
    }
}

public class Program
{
    static void Main(string[] args)
    {
        Button button = new Button();

        // Click 이벤트에 대한 이벤트 핸들러 등록
        button.Click += Button_Click;

        // Click 이벤트 발생
        button.OnClick();
    }

    // Click 이벤트를 처리하는 메서드
    private static void Button_Click(object sender, EventArgs e)
    {
        Console.WriteLine("Button clicked");
    }
}


위 예시 코드에서는 이벤트 처리를 구현하는 방법을 보여줍니다. `Button` 클래스에서 `Click` 이벤트를 선언하고, `OnClick` 메서드에서 이벤트를 발생시킵니다. `Program` 클래스에서는 `Button_Click` 메서드를 이벤트 핸들러로 등록하고, `OnClick` 메서드에서 이벤트가 발생하면 이벤트 핸들러가 호출됩니다. 이러한 방식으로 이벤트를 처리하면 객체 간의 상호 작용에서 매우 유용하게 사용할 수 있습니다.



따라서, C#에서의 대리자와 이벤트 처리는 객체 간의 상호 작용에서 매우 중요한 기능을 수행합니다. 대리자를 사용하여 메서드를 참조하고 호출하는 기능과 이벤트를 사용하여 객체 간의 상호 작용을 구현할 수 있습니다. 이러한 기능을 적절하게 활용하여, 보다 다양하고 유연한 소프트웨어를 개발할 수 있습니다.