이벤트 (Event)
어떤 사건이 발생했을 때 호출되어야 하는 메서드의 목록이다.
어떤 사건 즉, 이벤트에 의해 호출되는 메서드를 특별히 이벤트 핸들러 라고 한다.
이벤트 핸들러는 리턴값을 갖지 않는다.
이벤트는 내부적으로 델리게이트(delegate; 위임자)로 구현된다.
메시지는 C언어 수준의 구조체이기 때문에 객체 지향 환경과 잘 맞지 않는다. 그래서 메시지를 객체 지향적으로 캡슐화 한 것이 이벤트 이다.
이벤트의 선언 형식
ex) public event Notice OnComplete;
이벤트의 사용 예
C# 에서 이벤트는 내부적으로 델리게이트로 구현된다. 따라서 이벤트를 선언하기 전에 델리게이트를 먼저 선언해 두어야 한다.
이벤트와 델리게이트
이벤트와 델리게이트는 사용 목적이 동일한 장치이다.
이벤트는 델리게이트를 숨기고 최종 사용자가 편리하게 쓸 수 있는 좀 더 간단한 이벤트만 공개한다.
이벤트는 멀티스레드에 대해서도 안전하다는 장점이 있다.
cf) .NET 프로그래밍 정복 - 김상형
어떤 사건이 발생했을 때 호출되어야 하는 메서드의 목록이다.
어떤 사건 즉, 이벤트에 의해 호출되는 메서드를 특별히 이벤트 핸들러 라고 한다.
이벤트 핸들러는 리턴값을 갖지 않는다.
이벤트는 내부적으로 델리게이트(delegate; 위임자)로 구현된다.
메시지는 C언어 수준의 구조체이기 때문에 객체 지향 환경과 잘 맞지 않는다. 그래서 메시지를 객체 지향적으로 캡슐화 한 것이 이벤트 이다.
이벤트의 선언 형식
지정자 event 델리게이트 이름; |
이벤트의 사용 예
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 프로그래밍 정복 - 김상형