[c#] 메서드의 대리자와 이벤트 처리

C#에서 대리자(Delegate)와 이벤트(Event) 처리는 객체 지향 프로그래밍의 중요한 개념 중 하나입니다. 이 두 가지 요소를 사용하여 느슨한 결합(Loose Coupling)을 유지하고, 이벤트 기반 프로그래밍을 구현할 수 있습니다.

대리자(Delegate)

대리자는 메서드나 메서드에 대한 참조를 저장하는 객체입니다. 메서드의 시그니처와 일치하는 대리자를 사용하여 다른 메서드를 호출할 수 있습니다. 예를 들어, 특정 이벤트가 발생했을 때 실행될 메서드를 대리자로 지정하고, 이벤트가 발생하면 대리자를 호출하여 해당 메서드를 실행할 수 있습니다.

다음은 간단한 대리자의 예제 코드입니다.

public delegate void MyDelegate(string message);

public class MyClass
{
    public void Display(string message)
    {
        Console.WriteLine(message);
    }
}

위의 예제 코드에서 MyDelegate는 문자열을 입력으로 받아들이고 반환하지 않는 메서드를 가리킬 수 있는 대리자를 정의합니다.

이벤트(Event) 처리

이벤트는 클래스 내에서 발생하는 동작이나 상태의 변화를 나타냅니다. 클래스 외부에서 해당 이벤트에 대한 처리를 정의할 수 있도록 하기 위해 이벤트를 사용합니다. 이벤트는 대리자를 기반으로 작동하며, 외부에서 이벤트에 등록된 처리를 실행할 수 있습니다.

다음은 대리자를 사용하여 이벤트를 정의하고 발생시키는 예제 코드입니다.

public class Publisher
{
    public event MyDelegate MyEvent;

    public void DoSomething()
    {
        // Something happens
        MyEvent?.Invoke("Event occurred!");
    }
}

public class Subscriber
{
    public void OnEventHandled(string message)
    {
        Console.WriteLine("Event handled: " + message);
    }
}

위의 예제 코드에서 Publisher 클래스는 MyEvent라는 이벤트를 정의하고, Subscriber 클래스에서 이 이벤트에 대한 처리를 정의하고 있습니다.

이러한 방식으로 C#에서는 대리자와 이벤트를 활용하여 객체 간의 느슨한 결합을 유지하고, 이벤트 기반 프로그래밍을 구현할 수 있습니다.

결론

C#의 대리자와 이벤트 처리는 유연성과 모듈성을 높이는데 중요한 역할을 합니다. 이러한 개념을 활용하여 복잡한 소프트웨어 시스템을 구축할 때, 객체 간의 결합도를 줄이고 유지보수성을 높일 수 있습니다.

참고자료: