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#의 대리자와 이벤트 처리는 유연성과 모듈성을 높이는데 중요한 역할을 합니다. 이러한 개념을 활용하여 복잡한 소프트웨어 시스템을 구축할 때, 객체 간의 결합도를 줄이고 유지보수성을 높일 수 있습니다.
참고자료:
- https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/events/
- https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/