Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

닷넷!시작하기

Microsoft. NET 을 시작하는 분들을 위한 강좌입니다. 주로 기초적인 내용과 때론 기본적인 내용을 다룹니다

이벤트 (기본)

작성자 : 박종명
최초 작성일 : 2008-05-30 (금요일)
최종 수정일 : 2008-05-30 (금요일)
조회 수 : 3205

닷넷은 이벤트 기반의 프로그래밍 모델을 지원한다.
 
이벤트란 특정 객체에게 발생하는 변화를 (그 변화을 알고 싶어한는, 즉 이벤트를 구독하겠다고 등록된) 다른 객체에게 알릴 수 있게 한다.
 
우리가 흔히 알고 있는 패턴 중 옵저버 패턴에서와 같이 특정 객체에게 어떤 일이 발생하면 관심있는(등록된) 객체에게 그 변화를 알려 주는 것과 같은 개념이다.
 
이벤트 프로그래밍 모델에서는 이벤트를 발행하는 발행자(Publisher)와 그 이벤트의 발생을 알고 싶어 하는 구독자(Subscriber)로 구성된다. 데이터의 송/수신 모델에 기반하여 발행자를 송신자, 구독자를 수신자 라고도 한다.



이벤트는 앞서 살펴 보았던 delegate 에 기반한다.
delegate 는 그 자체만으로의 장점도 있지만 닷넷의 이벤트 프로그래밍의 근간이 되기도 한다.
이벤트가 실행된다는 것 역시 결국엔 특정 함수가 실행되는 것이며 일반적으로 이 함수는 이벤트 발생 객체와는 다른 객체에 정의 되므로 위임을 이용하는 모델인 것이다.
 
일단, 발행자와 구독자 객체간의 이벤트 코드 흐름을 살펴 보자.



그럼. 이번엔 샘플 코드를 보자(사용자 정의 이벤트 생성)
 
1. Publisher 객체

2. Subscriber 객체

3. 결과 화면




위의 샘플은 간단한 이벤트의 흐름을 알기 위해 윈폼의 컨트롤 클릭 이벤트와 유사하게 작성된 코드 이다.
물론 윈폼의 컨트롤에서는 클릭시 그 컨트롤 객체 내부에서 이벤트를 발생할 것이다.
(위의 Subscriber 의 코드 처럼 Publisher 의 DoClick() 의 호출이 필요없다)
 
또한 닷넷이 권장하는 사용자 정의 이벤트 사용법은 따로 있다.
간단히 언급하면 이벤트의 데이터 제공 방법과 이벤트 델리게이트의 매개변수에 관해 표준(?)을 따르기를 권고한다.
이에 대해서는 다음에 알라 보자 
  
  
참고로 닷넷의 버턴 이벤트 코드를 잠시 보자.

public class Form1{
 
private void InitializeComponent()
  {
   this.button1 = new System.Windows.Forms.Button();
   this.button1.Click += new System.EventHandler(this.button1_Click);
  }
 
private void button1_Click(object sender, System.EventArgs e)
  {
   MessageBox.Show("Click 이벤트 발생");
  }
 
}
 
결국 button1 이 Publisher 객체가 되고 Form1 이 Subscriber 객체가 되는 셈이다.
또한 Button 클래스의 Click 이벤트를 위한 델리게이트는 EventHandler 가 된다.
 

즉, 아래와 같은 모습일 것이다.

public delegate void EventHandler(object sender,System.EventArgs e);
public event EventHandler Click;



이름
비밀번호
홈페이지
CS <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요