델리게이트

1.

이벤트 핸들링을 위해서 사용, 쉽게말해서 피동적인 액션을 취할때 사용한다

누군가가 나를 호출하므로서 내가 호출당하기 위해 사건에 개입하는 일이 없게된다

즉, 사건과 그로인한 행위를 분리할 수 있다

 

 

2.

C++에서 이 이벤트핸들링을 위해서 사용하던 함수포인터라는 개념을 더더욱 쓰기좋게 만들어둔 형태

 

 

3.

C# delegate는 C/C++의 함수 포인터와 비슷한 개념으로 메서드 파라미터와 리턴 타입에 대한 정의를 한 후, 동일한 파라미터와 리턴 타입을 가진 메서드를 서로 호환해서 불러 쓸 수 있는 기능이다.
예를 들면, 아래 RunDelegate 델리게이트는 입력 파라미터가 int 하나이고 리턴 값이 없는 메서드를 가리킨다. RunThis() 메서드와 RunThat()메서드는 모두 int 파라미터 하나에 리턴 값이 없는 메서드이므로, RunDelegate의 함수 형식(prototype)과 맞으므로 이 delegate를 사용할 수 있다. 

 

 

예시.

버튼을 누르면 월드내 생성되는 오브젝트 전체가 죽는다고 가정했을 때
이벤트핸들링 없이 처리하면, 버튼이 눌렸을 시점을 IF문 등으로 체크하여 
모든 오브젝트를 돌며 죽는 처리를 해야함.

foreach(WorldInObject obj in ..) 
    obj.die(); 


그러나 델리게이트를 사용하면, 이것에 대한 코드를 안짜도 된다. 
모든 오브젝트의 어미에 미리 void OnButtonPressed(){ this.die(); } 를 선언하고 관장하는쪽에 등록 해두기만하면 전혀 호출할 필요가 없다.
왜냐하면, 버튼이 눌렸을 경우 버튼을 관장하는 매니저에서 OnButtonPressed를 자동으로 호출할 것이기 때문이다.

 

출처 : http://devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=36068

 

데브코리아

한국 게임개발자 커뮤니티

devkorea.co.kr

 

 

+ Recent posts