포스트를 만든 목적
- 내가 공부하려고 만들었다.
- 내가 라고 쓴 이유는 기본적으로 C/C++ 을 해보았다는 전제에서 썻기 때문이다.
관련 링크
- http://msdn.microsoft.com/ko-kr/library/900fyy8e%28VS.80%29.aspx // MSDN delegate
- http://msdn.microsoft.com/en-us/library/ms173175%28VS.80%29.aspx // How to Combine Delegates (.. 한글 문서를 못찾겠음)
내용
무엇을 콜백 이라고 하는가?
콜백은 '나에게 보고 해라." 라는 개념이다. .. 백문이 불여일견, 예제로 보자.
콜백 함수에 하이라이트를 켰으니, 확인 가능 하다. 그렇다. 함수 속에서 함수를 호출 한 것에 불과하다. 단지 "보고한다"
그러면 delegate가 무엇 인가?
delegate는 타입 안전성 + C++의 함수 포인터 집합 시킨 객체이다. 역시 백문이 불여일견
그렇다면 왜 콜백(CallBack)은 delegate로 표현해야 되는가?
이는 설계상에 문제인데, "왜 CallBack 으로 구현해야 하는가?" 의 답이 필요하다. CallBack을 구현하는 이유는 callback sample code 에서 보았듯이, 함수에서 다른 함수를 호출 할 때, 보고 받기 위해서 사용 한다.
CallBack을 delegate로 표현하는 이유는 "나에게 보고하라"의 개념 때문인다. "나에게" 라는 것이 A 객체 일 수도 있고, B 객체 일수도 있으며, 시스템 객체일 수도 있다. 즉, 보고해야 하는 대상이 바뀔 수 있다는 전제가 깔려 있다는 것이다.
그러므로, 함수를 변수 형태로 만들어야 하고, C#에선 delegate 밖에 답이 없다.
delegate 에 대한 특성을 정리해 줄 수 있는가?
- 함수를 변수로 만든다. - will not need sample
- 멤버 함수를 변수로 만든다. - will not need sample
- 타입 안전성을 가지고 있다. - will not need sample
- 함수들을 만들 묶을 수 있다.
결론
- 콜백은 함수 Delegate 로 만들자
여담
- C++ 에선 막강한 boost::bind() 와 비슷하다.
'책 정리 > Effective C#' 카테고리의 다른 글
item 26, IComparable과 IComparer를 이용하여 순차관계를 구현하라 (6) | 2010.07.19 |
---|---|
item 25, serializable 타입이 더 좋다. (0) | 2010.07.18 |
item 24, 명령적 프로그래밍보다 선언적 프로그래밍이 더 좋다. (0) | 2010.07.14 |
item 23, 클래스 내부 객체에 대한 reference 반환을 피하라. (0) | 2010.07.11 |
item 22, 이벤트를 이용하여 외부로 노출할 인터페이스를 정의하라. (0) | 2010.07.10 |
item 20, interface의 구현과 virtual 메서드의 overriding을 구분하라. (0) | 2010.07.10 |
item 19, 상속보다는 interface를 정의하고 구현하는 것이 좋다. (1) | 2010.07.07 |
item 18, 표준 Dispose 패턴을 구현하라. (2) | 2010.07.06 |
item 17, boxing과 unboxing을 최소화하라 (0) | 2010.07.04 |
item 16, Garbage를 최소화 하라. (0) | 2010.07.03 |
최근댓글