이벤트 (Event)



 어떤 사건이 발생했을 때 호출되어야 하는 메서드의 목록이다.
어떤 사건 즉, 이벤트에 의해 호출되는 메서드를 특별히 이벤트 핸들러 라고 한다.
이벤트 핸들러는 리턴값을 갖지 않는다.
이벤트는 내부적으로 델리게이트(delegate; 위임자)로 구현된다.
메시지는 C언어 수준의 구조체이기 때문에 객체 지향 환경과 잘 맞지 않는다. 그래서 메시지를 객체 지향적으로 캡슐화 한 것이 이벤트 이다.


이벤트의 선언 형식
 지정자 event 델리게이트 이름;
ex) public event Notice OnComplete;


이벤트의 사용 예
C# 에서 이벤트는 내부적으로 델리게이트로 구현된다. 따라서 이벤트를 선언하기 전에 델리게이트를 먼저 선언해 두어야 한다.


using System;

namespace EventTest
{
    // 이벤트 형식 선언
    //   - 델리게이트는 클래스와 같은 레벨에 선언
    public delegate void Notice();

    class Printer
    {
        public void Print()
        {
            Console.WriteLine("수신된 데이터를 인쇄합니다.");
        }
    }

    class Receiver
    {
        // 이벤트 선언
        public event Notice OnComplete;

        public void Receive()
        {
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine(i + "% 수신중");
                System.Threading.Thread.Sleep(200);
            }

            if (OnComplete != null)
                OnComplete();
        }
    }

    class CSTest
    {
        public static void Main()
        {
            Printer P = new Printer();
            Receiver R = new Receiver();

            R.OnComplete += P.Print;
            R.Receive();
        }
    }

 





이벤트와 델리게이트
이벤트와 델리게이트는 사용 목적이 동일한 장치이다.
이벤트는 델리게이트를 숨기고 최종 사용자가 편리하게 쓸 수 있는 좀 더 간단한 이벤트만 공개한다.
이벤트는 멀티스레드에 대해서도 안전하다는 장점이 있다.





cf) .NET 프로그래밍 정복 - 김상형

Posted by six605
,