41.2 이벤트와 대리자를 사용하여 메서드 등록 및 호출하기

    대리자는 이벤트를 위한 중간 단계고, 이벤트는 메서드 여러 개, 특히 이벤트 처리 전용 메서드라는 이벤트 처리기(핸들러) 메서드를 등록한 후 실행시키는 역할을 합니다. 주로 운영 체제 레벨에서 마우스 및 키보드 등 장치와 같이 연동될 때 사용하는 프로그램 구조입니다. 일반적인 프로그래밍 환경에서는 많이 사용하지 않을 듯하나, 컨트롤 및 컴포넌트 제작 분야로 깊이 들어가다 보면 이벤트를 빈번하게 작성하곤 합니다.

    이번에는 이벤트를 직접 코드로 만들어 보겠습니다. 다음 내용을 입력한 후 실행해 보세요.

    이벤트 작성: EventDemo.cs

    using System;
    
    public class ButtonClass
    {
        //① 이벤트 생성을 위한 대리자 하나 생성
        public delegate void EventHandler(); //메서드를 여러 개 등록 후 호출 가능
    
        //② 이벤트 선언: Click 이벤트
        public event EventHandler Click;
    
        //③ 이벤트 발생 메서드: OnClick 이벤트 처리기(핸들러) 생성
        public void OnClick()
        {
            if (Click != null) //이벤트에 등록된 값이 있는지 확인(생략 가능)
            {
                Click();    //대리자 형식의 이벤트 수행
            }
        }
    }
    
    class EventDemo
    {
        static void Main()
        {
            //ⓐ Button 클래스의 인스턴스 생성
            ButtonClass btn = new ButtonClass();
    
            //ⓑ btn 개체의 Click 이벤트에 실행할 메서드들 등록
            btn.Click += Hi1; //btn.Click += new ButtonClass.EventHandler(Hi1);
            btn.Click += Hi2; //btn.Click += new ButtonClass.EventHandler(Hi2);
    
            //ⓒ 이벤트 처리기(발생 메서드)를 사용한 이벤트 발생: 다중 메서드 호출
            btn.OnClick();
        }
        static void Hi1() => Console.WriteLine("C#");
        static void Hi2() => Console.WriteLine(".NET");
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.