아카이빙/C#

[C#] 이벤트와 델리게이트

셩님 2018. 6. 25. 16:40

[C#] 이벤트와 델리게이트

  • 이벤트를 선언하고 사용하는 절차는 다음과 같다.

1. 델리게이트를 선언

delegate void EventHandler(string msg);

2. 선언한 델리게이트의 인스턴스를 event 한정자로 선언

class Notifier
{
   public event EventHandler SomethingHappened;
   public void DoSomething(int num)
  {
       int temp = num % 10;

       if (temp != 0 && temp % 3 == 0)
      {
           SomethingHappened(String.Format("{0} : 짝", num));
      }
  }
}

3. 이벤트 핸들러 작성. 1에서 선언한 델리게이트와 일치하는 메소드면 가능

class MainApp
{
   public static void MyHandler(string msg)
  {
       Console.WriteLine(msg);
  }
   
   //..
}

4. 클래스의 인스턴스를 생성하고, 이 객체의 이벤트에 3에서 작성한 이벤트 핸들러 등록

class MainApp
{
   //...

   static void Main()
  {
       Notifier notifier = new Notifier();
       notifier.SomethingHappened += new EventHandler(MyHandler);

       for(int i = 1; i<30; i++)
      {
           notifier.DoSomething(i);
      }
  }
}

5. 이벤트가 발생하면 이벤트 핸들러 호출

for(int i = 1; i<30; i++)
{
notifier.DoSomething(i);
}

3 : 짝
6 : 짝
9 : 짝
13 : 짝
16 : 짝
19 : 짝
23 : 짝
26 : 짝
29 : 짝

델리게이트와 이벤트는 뭐가 다를까?

  • 이벤트는 외부에서 직접 사용할 수 없다.

    • public 으로 선언되어 있어도 자신이 선언 되어 있는 클래스의 외부에서는 호출이 불가

    • 반면, 델리게이트는 public / internal로 수식되어 있으면 클래스 외부에서도 호출가능

  • 델리게이트는 콜백 용도로 사용

  • 이벤트는 객체의 상태 변화나 사건의 발생을 알리는 용도로 사용해야 함.

참조

  • 뇌를 자극하는 C# 5.0 프로그래밍, 박상현, 한빛미디어 


'아카이빙 > C#' 카테고리의 다른 글

[C#] LINQ  (0) 2018.06.26
[C#] 람다식 (Lambda Expression)  (0) 2018.06.26
[C#] Delegate와 익명메소드  (0) 2018.06.25
[C#] Delegate는 언제 사용하는가  (0) 2018.06.25
[C#] Delegate (대리자)  (0) 2018.06.25