더북(TheBook)

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");
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.