델리게이트와 이벤트

이시율·2025년 4월 11일

델리게이트란
메서드를 참조할 수 있는 타입으로, 함수를 변수처럼 저장하고 전달하는게 가능하다.
주로 실행할 메서드를 나중에 결정할 때 사용하며 이벤트 시스템 구현의 기반이 된다.

namespace DelegateTest
{
    class Program
    {
        // 델리게이트 선언
        public delegate void TestDelegate(string name);

        // 델리게이트와 연결될 함수들
        static void TestHello(string name)
        {
            Console.WriteLine("Hello " + name);
        }

        static void TestHi(string name)
        {
            Console.WriteLine("Hi " + name);
        }

        static void Main(string[] args)
        {
            Console.Write("입력 (hello / hi): ");
            string input = Console.ReadLine();

            // 델리게이트 선언
            TestDelegate t;

            // 조건에 따라 연결
            if (input == "hello")
            {
                t = TestHello;
            }
            else if (input == "hi")
            {
                t = TestHi;
            }
            else
            {
                Console.WriteLine("알 수 없는 입력입니다.");
                return;
            }

            // 실행
            t("lsy");  // 원하는 이름 넣기
        }
    }
}

이벤트란
이벤트가 발생했을 때 실행되도록 등록된 함수 목록이며,
외부에서 직접 실행하지 못하게 막아놓은 델리게이트로 이벤트를 선언한 클래스 내에서만 이벤트를 발생시킬 수 있다.

class Program
{
    //  이벤트 델리게이트 정의
    public delegate void SimpleEvent();

    // 이벤트 선언
    public static event SimpleEvent OnEvent;

    static void Main()
    {
        // 이벤트에 함수 등록
        OnEvent += React;

        // 이벤트 발생시키기
        Console.WriteLine("이벤트 발생 전...");
        OnEvent?.Invoke();
    }

    //  이벤트에 반응하는 함수
    static void React()
    {
        Console.WriteLine("이벤트 감지됨");
    }
}

0개의 댓글