SSISO Community

갤러리정

Muti Delegate의 구현 - CSharp

12.5 Muti Delegate 구현

 

하나의 Delegate 여러 개의 Delegate 등록하는 방법에 대해서 알아보겠습니다. 하나의 Delegate 여러 개의 Delegate 포함할 있습니다. 이럴 쓰이는 것이 += 연산자입니다. 또한 여러 개가 묶인 Delegate에서 특정 Delegate 제거하는 것이 -= 연산자입니다.

 

하나의 Delegate 아니고 여러 개의 Delegate 묶여있다면 모든 Delegate들이 전부 호출됩니다. 다음은 여러 개의 Delegate 묶거나 특정 Delegate 제거하고 실행하는 것을 보여주는 예제입니다.

 

&

MultiDelegateTest.cs

Ü 하나의 Delegate 여러 개의 메서드를 호출하는 예제

using System;

delegate 
void 
TopDelegator(string str);

class 
Top{
  
public static void 
StaticMethod(string str){
    Console.Write(
"Static Method
입니다!!\t");
    Console.WriteLine(str);
  }
  
public void 
NormalMethod(string str){
    Console.Write(
"Normal Method
입니다!!\t");
    Console.WriteLine(str);
  }
//class

class 
MultiDelegateTest {
  
public static void 
Main() {
    Top t = 
new 
Top();
    TopDelegator bank;
    TopDelegator td1 = 
new 
TopDelegator(t.NormalMethod);
    TopDelegator td2= 
new 
TopDelegator(Top.StaticMethod);
    bank = td1;
    bank(
"add TopDelegator 1"); //
하나의 Delegate호출
    
bank += td2;
    bank(
"add TopDelegator 2"); //
두개의 Delegate호출
    
bank -= td1;
    bank(
"remove TopDelegator 1"); 

    //하나의 Delegate제거  하나의 Deleate 호출
  
//main
//class

C:\C#Example\12>csc MultiDelegateTest.cs

C:\C#Example\12>MultiDelegateTest

Normal Method입니다!!   add TopDelegator 1

Normal Method입니다!!   add TopDelegator 2

Static Method입니다!!   add TopDelegator 2

Static Method입니다!!   remove TopDelegator 1

 

가장 중요한 요소는 += 연산자입니다. 흔히 숫자 값이나 string 더할 많이 사용하는 연산자입니다. 여기에서 Delegate 위해서 연산자 오버로딩된 것으로, 생성된 Delegate 객체간에 += 연산자를 사용하여 여러 개의 Delegate 하나로 병합할 있습니다.

 

bank = td1;       

bank("add TopDelegator 1"); //td1 Delegate호출

bank += td2;     

bank("add TopDelegator 2"); //td1,td2 Delegate호출(두개가 동시에 호출)

 결과 창을 보시면 2개의 Delegate 포함된 Delegate 호출했을 2 모두 호출되는 것을 확인하실 있습니다. 이런 방법으로 deleTest("add deleTest2"); 호출해 주면 지정되어 있는 메서드가 모두 호출됩니다.

 

메서드를 추가하는 방법이 있으니 제거하는 방법도 있겠지요. 추가했던 메서드를 제거할 때에는 -= 연산자를 사용하여 추가했던 Delegate 객체를 제거하면 됩니다.

 

bank -= td1;

bank("remove TopDelegator 1");         

 

하나의 Delegate 다른 Delegate 추가, 삭제하는 방법

추가하려는 메서드를 담고 있는 객체를 += 연산자를 사용하여 등록

추가한 메서드를 제거할 때에는 –= 연산자를 사용하여 제거

멀티 Delegate 사용할 메서드는 반드시 void 반환해야

 

멀티 Delegate 사용할 메서드는 반드시 void 반환해야 하며 void 반환하지 않으면 += 같은 연산자를 사용할 없습니다. 만약, 2개의 Delegate 각각 다른 값을 리턴하고 있다면 어떠한 값을 우선적으로 리턴해야 하는지 애매하기 때문입니다. , 호출을 목적으로 하는 것이지 리턴을 목적으로 하지 않기 때문입니다.

 

지금까지 Delegate 대해서 알아보았습니다. Delegate 처음 접하시는 분들은 상당히 어렵게 느끼실 수도 있지만 자세히 관찰하면 아주 쉬운 원리로 되어 있습니다. 결국, Delegate에서는 Delegate 타입을 선언하는 것과 Delegate 객체를 생성하는 , Delegate 객체를 사용하는 그리고 연산자를 사용하여 Delegate 메서드를 추가하고 삭제하는 방법만 익히시면 됩니다. 다음 절에서는 Delegate 활용한 이벤트에 대해서 알아보겠습니다.

806 view

4.0 stars