2010.07.10 15:35 책 정리/Effective C#

포스트를 만든 목적

  • 내가 공부하려고 만들었다.
  • 내가 라고 쓴 이유는 기본적으로 C/C++ 을 해보았다는 전제에서 썻기 때문이다.

관련 링크

내용

무엇을 콜백 이라고 하는가?

콜백은 '나에게 보고 해라." 라는 개념이다.  .. 백문이 불여일견, 예제로 보자.

콜백 함수에 하이라이트를 켰으니, 확인 가능 하다. 그렇다. 함수 속에서 함수를 호출 한 것에 불과하다. 단지 "보고한다"

그러면 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() 와 비슷하다.


저작자 표시
신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요

  1. 예제 소스가.. 2016.12.19 16:44 신고  Addr  Edit/Del  Reply

    delegate sample 코도는 완전 콜백 내용과 무관하네요;;