재우니의 블로그



이번에는 delegate 을 살펴보겠는데요.

먼저 사전을 뒤져보니 흠...

위임이라고 하네요. 무엇을 위임하겠다는 의미인지 깊에 살펴봐야 겠는데요. 제가 삼국지3를 하면서 위임이라는 기능이 있더군요. 보니까, 왕대신 니가 맡아서 운영해라..~~ 아예 권한을 주더군요. 자.~~ 왕이 귀찮으니 니가 해라는 것 같은데요. 
왕을 메소드로 비유하고 니는 delegate 가 하면 되겠네요.

c#을 하면서 delegate 부분에 대해 매우 어려워하는 분들이 많죠. 정말 중요한 부분이니 꼭 이번에 배우고 넘어가죠. 
모른다면 c#을 배웠다고 말하기엔 좀..그렇죠..^^; 


델리게이트는 메소드를 참조하는 데이터 형식입니다. C++ 의 함수 포인터와 비슷하나 인스턴스화 되어 클래스의 정적 메소드와 클래스의 특정 인스턴스의 메소드를 호출하는데 사용됩니다. 델리게이트를 사용하게 되면 실행시에 어떤 메소드를 호출하고자 하는지 결정할 수 있습니다. 쉽게 정의하면 메소드 대리자이며, 특별한 메소드를 선정해서 캡슐화 해주는 역할...이라고 정의하고 싶네요. 



■ 그럼 delegate 을 선언하는 방법을 살펴보죠.


public delegate 데이터타입 델리게이트이름 (parameters)



한번 기술해 볼까요?


public delegate void Gear(int x, int y);



기술하고요. 메소드를 기술하겠습니다.

public static void Gear1(int x, int y)
{
       Console.WriteLine("Gear1 의 값은 {0}과 {1}입니다.",x,y);
}



메소드를 보시면 델리게이트와 비교할때 인자값과 리턴형이 똑같죠? 꼭 같아야 합니다.

그럼 델리게이트를 사용하고자 한다면 new 연산자를 이용하여 객체를 먼저 생성해 주어야 합니다.
델리게이트 생성자 파라미터에 위임할 메소드명을 기재합니다. 

Gear gear = new Gear(Gear1);



Gear1의 메소드가 gear 라는 델리게이트를 생성하고 위임을 했죠. 자..
한번..휘둘러 볼까요?

gear(1,2);



이렇게 사용을 하면 Gear1의 메소드를 호출하여 출력을 하겠죠?

결과값은?


Gear1 의 값은 1과 2입니다.




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