델리게이트(delegate) 선언 및 사용
델리게이트는 메서드 참조를 안전하게 나타내는 타입입니다. 메서드의 호출을 캡슐화하고, 여러 메서드를 하나의 델리게이트로 결합할 수 있습니다.
델리게이트 선언
델리게이트는 특정 시그니처(매개변수와 반환 타입)를 가진 메서드를 참조할 수 있도록 정의됩니다.
// 델리게이트 선언
public delegate void Notify(string message);
// 메서드 선언
public static void SendMessage(string message)
{
Console.WriteLine("메시지: " + message);
}
class Program
{
static void Main()
{
// 델리게이트 인스턴스 생성
Notify notify = new Notify(SendMessage);
// 델리게이트 호출
notify("안녕하세요, 델리게이트!");
}
}
위 코드에서는 `Notify`라는 델리게이트를 선언하고, `SendMessage`라는 메서드를 델리게이트로 호출합니다. 델리게이트는 메서드처럼 사용되며, 메서드를 참조하고 호출하는 역할을 합니다.
익명 메서드, 람다식
델리게이트는 익명 메서드나 람다식과 함께 사용할 수 있습니다. 이를 통해 코드가 간결하고 읽기 쉽게 됩니다.
익명 메서드 사용
// 익명 메서드 사용
Notify notify = delegate(string message)
{
Console.WriteLine("익명 메서드: " + message);
};
notify("익명 메서드 예제!");
위 예제에서는 `delegate` 키워드를 사용하여 익명 메서드를 덧붙여 델리게이트를 인스턴스화했습니다.
람다식 사용
// 람다식 사용
Notify notify = (message) => Console.WriteLine("람다식: " + message);
notify("람다식 예제!");
람다식을 사용하면 더 간결하게 델리게이트를 정의할 수 있습니다. `=>` 문법을 사용하여 함수 본문을 한 줄로 작성할 수 있습니다.
이벤트(event) 선언 및 구독
이벤트는 델리게이트를 기반으로 하며, 객체 간의 통신을 처리하는 데 사용됩니다. 이벤트는 일반적으로 특정 조건에서 발생하는 메서드 호출을 다룹니다.
이벤트 선언
// 이벤트 선언
public delegate void Notify(string message);
public class MessagePublisher
{
public event Notify MessageSent;
public void SendMessage(string message)
{
MessageSent?.Invoke(message); // 이벤트 발생
}
}
class Program
{
static void Main()
{
MessagePublisher publisher = new MessagePublisher();
// 이벤트 구독
publisher.MessageSent += (message) => Console.WriteLine("이벤트 수신: " + message);
publisher.SendMessage("이벤트 예제!");
}
}
`MessageSent` 이벤트는 `SendMessage` 메서드에서 발생합니다. `MessageSent?.Invoke` 구문을 사용하여 이벤트가 발생했을 때 구독자에게 알립니다. 이벤트가 발생하면 구독한 메서드가 실행됩니다.
이벤트 구독 및 구독 해제
이벤트는 구독하고 해제하는 방식으로 동작합니다. 구독을 해제하려면 `-=` 연산자를 사용합니다.
class Program
{
static void Main()
{
MessagePublisher publisher = new MessagePublisher();
// 이벤트 구독
publisher.MessageSent += (message) => Console.WriteLine("이벤트 수신: " + message);
publisher.SendMessage("이벤트 발생!");
// 이벤트 구독 해제
publisher.MessageSent -= (message) => Console.WriteLine("이벤트 수신: " + message);
publisher.SendMessage("이벤트 발생 후 구독 해제!");
}
}
위 코드에서 이벤트 구독을 해제하는 방법을 보여줍니다. 이벤트가 발생한 후 더 이상 구독된 메서드가 실행되지 않습니다.
'Programming' 카테고리의 다른 글
| C# WPF/WinForms UI 프로그래밍 (0) | 2025.12.12 |
|---|---|
| C# LINQ(Language Integrated Query) (0) | 2025.12.11 |
| C# 컬렉션과 제네릭 (0) | 2025.12.09 |
| C# 객체지향 프로그래밍 (OOP) (0) | 2025.12.08 |
| C# 클래스와 객체 (0) | 2025.12.07 |