[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 로 옮길 예정입니다.
'동영상 강의 > C# 언어 동영상 강의' 카테고리의 다른 글
[C# 동영상 강의] 19. 리플렉션 (0) | 2016.04.09 |
---|---|
[C# 동영상 강의] 18. .NET 어셈블리 (0) | 2016.04.09 |
[C# 동영상 강의] 16. 컬렉션 (0) | 2016.04.09 |
[C# 동영상 강의] 15. 인터페이스 (0) | 2016.04.09 |
[C# 동영상 강의] 14. 상속과 다형성 (0) | 2016.04.09 |
[C# 동영상 강의] 13. 문자열 (0) | 2016.04.09 |
[C# 동영상 강의] 12. 배열 (0) | 2016.04.09 |
[C# 동영상 강의] 11. Object (0) | 2016.04.09 |
[C# 동영상 강의] 10. 메서드 (0) | 2016.04.09 |
[C# 동영상 강의] 9. 생성자 (0) | 2016.04.09 |