C#에서 delegate(대리자)와 이벤트(event)는 이벤트 기반 프로그래밍을 구현하는 데 사용되는 중요한 기능입니다. 이 두 요소는 특히 GUI 응용 프로그램 및 비동기 프로그래밍과 같은 상황에서 유용합니다. 아래에서 각각에 대한 간단한 설명을 제공합니다.
Delegate는 메서드를 참조하는 형식입니다. 다른 언어에서는 함수 포인터 또는 콜백과 유사한 역할을 합니다. C#에서는 메서드의 시그니처와 일치하는 델리게이트 형식을 선언하고, 해당 델리게이트 인스턴스를 사용하여 메서드를 참조할 수 있습니다.
// 델리게이트 선언
delegate void MyDelegate(string message);
class Program
{
static void Main()
{
// 델리게이트 인스턴스 생성
MyDelegate myDelegate = new MyDelegate(PrintMessage);
// 델리게이트를 통한 메서드 호출
myDelegate("Hello, Delegate!");
}
static void PrintMessage(string message)
{
Console.WriteLine(message);
}
}
물론, 이벤트는 C#에서 특정한 상황이나 동작이 발생했을 때 다른 부분에 알리기 위해 사용되는 개념입니다. 일반적으로 GUI 프로그래밍이나 비동기 작업과 관련이 있습니다.
이벤트는 특별한 형태의 델리게이트입니다. 델리게이트는 메서드를 참조하는 개체이고, 이벤트는 델리게이트의 인스턴스입니다. 이벤트를 사용하면 객체 간에 느슨한 결합(Loose coupling)을 유지할 수 있습니다.
이벤트 선언:
public event EventHandler MyEvent;
이벤트 발생:
if (MyEvent != null)
{
MyEvent(this, EventArgs.Empty);
}
이벤트 핸들러 등록:
instanceOfSomeClass.MyEvent += SomeMethod;
이벤트 핸들러 정의:
void SomeMethod(object sender, EventArgs e)
{
// 이벤트 처리 로직
}
이벤트 핸들러 제거 (선택적):
instanceOfSomeClass.MyEvent -= SomeMethod;
using System;
class Program
{
public event EventHandler MyEvent;
public void RaiseEvent()
{
if (MyEvent != null)
{
MyEvent(this, EventArgs.Empty);
}
}
static void Main()
{
Program program = new Program();
// 이벤트 핸들러 등록
program.MyEvent += Program_MyEvent;
// 이벤트 발생
program.RaiseEvent();
}
static void Program_MyEvent(object sender, EventArgs e)
{
Console.WriteLine("이벤트가 발생했습니다!");
}
}
이 예제에서 MyEvent
는 이벤트이며, RaiseEvent
메서드를 통해 이벤트가 발생합니다. Main
메서드에서는 이벤트 핸들러를 등록하고, 이벤트가 발생하면 등록된 핸들러가 실행되어 메시지가 출력됩니다.