Creative Commons License

Microsoft .NET

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

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

.

닷넷!시작하기

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

Delegate (기본)

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

* 델리게이트(위임) 정의
메서드를 간접적으로 호출.
메서드 호출에 대한 참조를 가짐
인스턴스 메서드 뿐만 아니라 스태틱 메서드에 대한 참조를 가질수 있음
 
* 델리케이드 선언하기
delegate 메서드의 시그너쳐(메서드명,반환타입,전달파라메타)
delegate void TestDelegate()
 
* 델리케이트형 변수 선언
TestDelegate testDelegate
 
* 델리케이트 생성
testDelegate = new TestDelegate(this.Method)
 
* 델리게이트 호출(메서드 호출과 동일)
TestDelegate()


====================================================================
 
* delegate
delegate 는 특정 Method 의 참조를 가짐으로써 그 Method 의 간접 호출을 가능케 한다.
이는 닷넷의 여러 타입 중 하나이다. 우리가 알고 있듯이 클래스 역시 타입이다. 더 자세히는 사용자 정의 타입이라고 한다. delegate 는 클래스와 유사한 점이 많다. 클래스의 정의, 선언, 생성 의 과정은 delegate 와 거의 유사하다.
단, delegate 는 메서드를 간접 호출을 위임 받는 만큼 선언과 사용에 있어서 일반 메서드와의 유사성도 가지고 있다

* delegate 사용하기
앞서 delegate 와 클래스의 유사성에 대해 언급하였다. 아래의 delegate 사용하기 코드에서 그 유사성이 입증된다

- class 사용 -
   1. class 정의
     public class TempClass{…}
   2. class타입 객체변수 선언
     TempClass tc;
   3. class 타입 객체 생성
     tc = new TempClass();


 - delegate 사용 -
   1. delegate 정의
      public delegate void TempDelegate();
   2. delegate 타입 참조변수 선언
      TempDelegate td;
   3. delegate 생성
      td = newTempDelegate(AnotherMethod);
   4. delegate 호출
      td();

1.2.3 번의 과정을 보면 클래스와 delegate 는 아주 유사함을 알 수 있다.

그럼, 이제 delegate 만의 특이한 사항을 살펴 보자
3번 delegate 생성을 보면 AnotherMethod 를 가지고 생성됨을 알 수 있다.
delegate 는 메서드의 참조를 가져 그 메서드를 실행한다고 앞서 언급했다.
즉, AnotherMethod는 호출대상이 되는 메서드인 것이다. 결과적으로 4번과정의 delegate 호출을 하면 AnotherMethod 라는 임의의 메서드가 실행된다는 것이다. 여기서 한가지 주의해야 할 사항이 있다.
delegate 는 임의의 메서드의 간접호출 하는 것이므로 호출대상이 되는 메서드의 시그너처를 동일하게 맞추어 주어야 한다. (메서드의 시그너처란 메서드의 반환 타입과 전달 매개변수들을 의미한다.)

ex> void Method(int i , int j) <- 메서드 스그너쳐

위의 예에서 AnotherMethod 는 void AnotherMethod() 형태의 시그너쳐임을 의미하는 것이다
만일 AnotherMethod 가 int AnotherMethod(int i , int j) 와 같은 스거너쳐를 가진다면 우리가 정의하는 delegatge 는 아래와 같아야 할 것이다.

public delegate int TempDelegate(int i , int j);


* delegate 장점
1. 메서드에 대한 간접 참조를 가진 delegate 타입의 변수를 이용하여 실행 시 메서드 호출을 결정할 수 있다.
2. 유사한 일을 하는 서로 다른 이름의 메서드를 동일한 방법으로 호출 할 수 있다.


* 정리
1. delegate 는 임의의 메서드의 간접호출을 가능케 한다.
2. delegate 는 메서드의 참조를 가진다.
3. 시그너쳐(매개변수,리턴값)가 같은 모든 메서드는 하나의 delegate 로 호출될 수 있다 
4. 인스턴스 메서드 뿐만 아니라 static 메서드에 대한 참조도 가능하다


 

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