동영상 강의/C# 언어 동영상 강의

[C# 동영상 강의] 17. 대리자 (delegate)

언제나휴일 2016. 4. 9. 16:39
반응형

[C# 동영상 강의] 17. 대리자 (delegate)




다루는 내용

대리자(delegate)

Invoke 메서드

BeginInvoke 메서드

EndInvoke 메서드


대본


슬라이드 1

이번 강의에서는 대리자에 대해서 살펴보기로 하겠습니다.

슬라이드 2

대리자는 메서드 시그니처를 정의하는 형식으로 반환 형식도 호환되어야 합니다.

그리고, 대리자는 암시적 클래스로 컴파일러를 통해 Delegate클래스에서 파생된 MulticastDelegate에서 파생됩니다.

C C++의 함수 포인터와 비슷한 역할을 하지만 함수 포인터와 달리 대리자 개체는 관리화 대상인 안전한 형식입니다.

참고로, Delegate 클래스와 MulticastDelegate는 시스템과 컴파일러만 이를 기반으로 파생시킬 수 있습니다.

그리고, 대리자는 암시적 봉인된 클래스로 기본 클래스가 될 수 없습니다.

대리자는 시그니처가 호환되는 모든 메서드를 연결할 수가 있으며 대리자를 통해 연결된 메서드를 호출이 가능합니다. 또한, 여러 메서드를 하나의 대리자 형식 변수에 +연산자를 통해 결합 및 – 연산자를 통해 연결 제거가 가능하며 호출이 가능합니다. 그리고, MulticastDelegate또한 시스템과 컴파일러만 파생시킬 수 있습니다.

대리자를 이용하여 이벤트를 정의할 수 있으며 해당 이벤트에 연결된 메서드는 이벤트 처리기라 합니다여러분들은 WinForm과 같은 윈도우 프로그래밍이나 웹 프로그래밍을 하게 되면 자연스럽게 이벤트를 만나게 될 것입니다당연히 대리자를 통해 콜백을 정의할 수 있습니다

슬라이드 3

컴파일러에 의해 생성되는 대리자 클래스에 노출된 주요 멤버들을 알아봅시다.

먼저 생성자가 노출이 되는데 입력 인자는 object와 메서드 주소에 해당하는 int가 오는데 프로그래밍을 할 때에는 정의한 시그니처와 일치하는 메서드를 입력인자로 넣으면 컴파일러가 적절한 코드로 변경을 해 줍니다.

그리고, 연결된 메서드를 동기식으로 호출해 주는 Invoke메서드가 있는데 시그니처는 대리자에 정의한 것과 일치하게 됩니다프로그래밍을 할 때 Invoke메서드를 직접 호출할 수도 있지만 대리자 형식 변수를 함수처럼 호출을 하면 내부적으로 Invoke메서드를 호출해 줍니다.

또한, BeginInvoke메서드를 통해 연결된 메서드를 비동기식으로 호출을 할 수도 있습니다. 리턴 형식은 비동기 작업을 종료하면서 필요한 IAsyncResult이며 입력 매개변수는 대리자를 정의할 때의 입력 매개변수들이 앞에 오며 그 뒤에 비동기 작업이 종료되면 자동적으로 호출되는 AsyncCallback AsyncCallback으로 전달할 object가 있습니다그리고, 비동기 작업을 종료화 시키는 EndInvoke가 있습니다.


개발도구를 통해 대리자에 대해 좀 더 살펴보기로 합시다

 

실습




  앞으로 프로그래밍 관련 글은 새롭게 개설한 언제나 휴일 전용 사이트에서 만나보세요. 

2017년 1월 1일까지 이 곳의 프로그래밍 자료는 http://ehpub.co.kr 로 옮길 예정입니다.
 

반응형