2006년 6월 5일 월요일

delegate 이야기

"클릭하세요 C# 2.0 프로그래밍"에서 델리게이트에 대한 설명을 했지만 또 다른 방법으로 설명을 시도해 보고자 합니다. 그냥 가볍게 읽어보세요. ^^

-----------------------------------------------------------------------------------

오늘은 철수 아버지 생신입니다. 학교 다녀온 철수는 어머니를 도와 아버지의 생일상을 준비합니다. 온 가족이 아버지의 생일을 깜빡하고 있었기에 준비된 것은 아무것도 없었습니다.

어머니는 늦었지만 아버지의 생신을 위해 맛있는 저녁을 준비하기로 하고, 철수에게 간단한 임무를 부여했습니다. 철수의 임무는 이렇습니다. 어머니가 돈과 메모장을 쥐어주시면 그대로 수퍼마켓으로 가서 메모장에 적힌 대로 물건을 사오면 됩니다. 철수는 수퍼마켓을 오가며 콩나물, 고사리, 삼겹살, 상추, 음료수 등을 어머니가 메모지에 적힌 대로 사왔습니다.

철수는 어머니의 심부름을 훌륭히 수행했고, 온 가족이 즐거운 생일상을 맞이할 수 있었습니다.

자, 생각해 봅시다. 철수는 어머니의 장보는 일을 대신 처리하는 "대리자" 역할을 수행했습니다. C# 언어에서의 delegate(대리자)도 철수가 수행한 것과 같은 심부름꾼 역할을 합니다.

장보는 일을 어머니가 직접해올 수도 있었지만, 어머니는 철수에게 그 일을 맡기고 요리에만 집중했습니다. 철수는 어떤 물건을 사와야 할지 알 수 없었지만 어머니가 메모지와 돈만 손에 쥐어주면 어머니가 원하는 것을 사올 수 있었습니다. 철수는 오늘 장보는 일만 했지만 그 외에도 어머니가 시키는 심부름을 다양하게 해낼 수 있습니다. 예를 들어 강아지를 산책시킨다던가, 세탁소에 바지를 맡기러 간다던가 하는 것 말이죠.

철수의 임무는 사전에 정해지지 않았지만 필요할 때마다 어머니가 임무를 부여할 수 있습니다.

delegate도 철수와 같은 신세입니다. 어떤 일을 할 지에 대해서는 정해지지 않았지만 필요할 때 다른 임무(메쏘드)를 부여받아 실행하도록 되어 있지요.

delegate가 수행하는 심부름의 예에 어떤 것이 있을까요? 이벤트의 이벤트 처리기가 있네요. 이벤트는 자신이 생성될 때 수행되어야 하는 동작을 사전에 정의해 놓은 메쏘드를 갖는 대신, 델리게이트를 가짐으로써 다양한 내용의 이벤트 처리기를 가질 수 있습니다.

즉, 이벤트는 아버지 생신, 이벤트가 가지는 델리게이트는 철수, 그리고 이벤트 처리기(메쏘드)는 메모지와 돈에 해당한다고 할 수 있습니다. 그럼 어머니는 어디에 해당하냐구요? ㅋㅋ 여러분, 바로 프로그래머겠죠?

댓글 없음:

댓글 쓰기