자바스크립트를 허용해주세요.
[ 자바스크립트 활성화 방법 ]
from Mohon Aktifkan Javascript!
 

[C#] 12장 C# 델리게이트와 이벤트

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