728x90

📙 1. 델리게이트 (Delegate)
델리게이트(Delegate)는 메서드를 참조하는(가리킬 수 있는) 타입으로 메서드 포인터 같은 역할을 담당합니다, 특정 메서드 대신 호출하거나, 메서드를 변수처럼 전달할 때 사용합니다. 기본적인 문법은 다음과 같습니다.
// 델리게이트 선언
public delegate void MyDelegate(string message);
// 클래스 선언
class Program
{
static void Main()
{
// 델리게이트 변수에 메서드 등록
MyDelegate myDel = printMessage;
// 호출
myDel("Hello Delegate!");
}
static void printMessage(string msg)
{
Console.WriteLine(msg);
}
}
👉 결과:
Hello Delegate!
📙 2. 여러 메서드 연결 (멀티 캐스트)
public delegate void myDel(string msg);
class Program
{
static void Main()
{
myDel del = PrintA;
del += PrintB;
del("테스트");
}
static void PrintA(string msg) => Console.WriteLine("A: " + msg);
static void PrintB(string msg) => Console.WriteLine("B: " + msg);
}
👉 결과:
A: 테스트
B: 테스트
📙 3. 이벤트 (Event)
이벤트(Event)는 델리게이트를 기반으로 한 특별한 멤버로 보통 발생 -> 구독자(리스너)에게 알림 구조 순으로 사용됩니다, event 키워드로 선언할 수 있습니다.
// 델리게이트 선언
public delegate void Notify(string msg);
class Publisher
{
// 이벤트 선언
public event Notify OnPublish;
public void DoSomething()
{
Console.WriteLine("작업 실행 중....");
// 이벤트 발생함
OnPublish?.Invoke("작업 완료!");
}
}
class Subscriber
{
public void HandleEvent(string msg)
{
Console.WriteLine("구독자가 받은 메시지입니다!:" + msg);
}
}
class Program
{
static void Main()
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
// 이벤트 구독
pub.OnPublish += sub.HandleEvent;
pub.DoSomething();
}
}
👉 결과:
작업 실행 중....
구독자가 받은 메시지입니다!:작업 완료!
📙 4. 델리게이트 vs 이벤트 차이
| 구분 | 델리게이트 | 이벤트 |
| 선언 키워드 | delegate | event |
| 직접 호출 가능? | 가능(del()) | 불가능 (Publisher 내부에서만 Invoke) |
| 용도 | 메서드 참조/콜백 처리 | 옵저버 패턴, 구독-발행 모델 |
| 접근 제한 | 외부에서 추가/삭제/호출 가능 | 외부에서는 +=/-=(구독/해제)만 가능 |
GitHub - Koras02/project
Contribute to Koras02/project development by creating an account on GitHub.
github.com
728x90
LIST
'게임 모딩 > C#' 카테고리의 다른 글
| [C#] 14장 LINQ 기본 -> 고급쿼리 (2) | 2025.08.31 |
|---|---|
| [C#] 13장 C# 람다식과 Func (0) | 2025.08.24 |
| [C#] 11장. C# 예외 처리 (1) | 2025.08.18 |
| [C#] 10장. C# 패턴일치 (0) | 2025.02.26 |
| [C#] 9장, C# 개체 지향 프로그래밍(OOP) (0) | 2025.02.24 |