관리 메뉴

심재운 블로그

델리게이트와 이벤트(Event)의 관계에 대한 설명(1) 본문

닷넷관련/CSharp

델리게이트와 이벤트(Event)의 관계에 대한 설명(1)

재우니 2009.02.12 22:51


이벤트란 무엇일까요?  



심재운님 !! 이벤트가 파티이벤트나 결혼이벤트..이런 것인가요? .... 저도 잘.... ^^;

그래서 영어사전을 오늘도 뒤져 보았습니다. "사건"이라고 하고 뭔가 발생된다고 하네요.

간단히 정의를 하면...


다른 객체에게 뭔가 일어났다~~... 후딱 그러니까 이에 해당되는 코드는 나와서 실행해라.

.... 라고 명령을 주는 겁니다.




보통 윈도우 응용프로그램이나 GUI 프로그래밍에서 많이 사용되는 방법입니다. 비유를 하자면 우리 모두가 어떤 선택을 해서 해당되는 기능이 실행될 수 있도록 연결해 주는 역할을 이벤트가 합니다. 우리는 이런 이벤트를 델리게이트와 함께 사용할 것입니다. 이벤트에는 이벤트를 보내는 객체와 받는 객체, 그리고 이벤트 핸들러로 구성되어 있어요. 



특정 버튼을 클릭하면 이벤트가 발생되고 이것을 받아주는 객체가 필요하겠죠. 이벤트 핸들러란 이벤트를 보내는 객체와 받는 객체간의 다리 역활을 해줍니다. 




참고로 보통 이벤트 인자는 EventArgs 객체를 상속받아서 정의를 하며 정보를 보내는데 사용됨을 참고 하시기 바랍니다.



1. 델리게이트 선언을 어떻게 하는지 한번 살펴보죠.

public delegate void EventHandler(object sender, EventArgs arg);



2. 이벤트 객체를 생성해 보자

public event EventHandler myEvent;



3. myEvent 에 들어있는 delegate 함수를 호출하기 위해서 아래와 같이 하면 됩니다.

myEvent(this, arg);


t현재 인스턴스를 나타내는 나 자신을 의미하는 this 와 EventArgs 에 객체를 보냅니다.

아주 simple 한 소스를 소개할께요. ^^

델리게이트와 이벤트 간의 관계를 정리하기 위해서 복잡하지 않은, 간단한 소스를 분석해 보죠.








Event 클래스를 구현하는 곳이고, 일반 클래스 처럼 public 접근제한자를 사용해서 접근토록 하였고, 
이벤트클래스를 만들기 위해 event 명령어를 사용했습니다.






우선 클래스를 생성하고 delegate 를 생성하여 event 객체에 추가를 했고,  FireEventNow() 메소드를 사용하여 event 를 발생켰습니다.

정리하면, 델리게이트 (MyEventDelegate) 는 일반 메소드(EventCallThisFunction) 와 동일한 파라미터 구조를 갖춰야 하며,  이벤트는 개별적으로 클래스(MyEventClass1, MyEventClass2 )마다 event 를 구현하고 event 를 호출할 메소드를 구현합니다. 그 메소드 안에 델리게이트에 넘길 파라미터값을 기재합니다. 델리게이트 생성자 파라미터에 넘긴 메소드(EventCallThisFunction) 는 델리게이트 형식과 동일하게 구현해야 합니다. 각각의 event 의 클래스안에 기술한 메소드의 파라미터값("myEventClass1" 또는 "myEventClass2")에 따라 senderName 파라미터에 값 전송으로 출력값이 달라집니다.

 

좀...어렵나요? ^^; 




출력값은 아래와 같아요.







posted by 심재운 (shimpark@gmail.com)



0 Comments
댓글쓰기 폼