BLOG ESPERANCA

C# callback 사용법 본문

Program/C / C++ / C#

C# callback 사용법

yobuce 2013. 3. 1. 12:12

as3 를 예로 들자면 콜백작성이 매우 자유롭다 이유는 Function 형이 존재하기 때문이다. 

ex> var someMethod : Function 
someMethod() 

처럼 변수처럼 선언하였다가 변수를 원할때는 '()' 를 빼줬다가 메소드를 원할때는 '()'를 붙이기만 하면 된다.
 c# 은 이러한 나이스한 방법이 다소 제한된다. 
교과서 적인 콜백을 보자면, 정석적인 이벤트 선언이나, 기본 api에서 제공하는 콜백을 사용하는 경우를 무수히 볼수 있다. 
하지만 더욱 간편하고 as3 의 표현과 같은 느낌으로 사용하는 법을 한번 보자 정말 심플한 콜백 사용법이다.






public
partial class Form1 : Form { public Form1() { InitializeComponent(); //콜백테스트 클레스 선언 , 생성 CallBackTEST callbackTest = new CallBackTEST(); callbackTest.onComplete(complete); } //CallBackTEST 클레스에서 선언한 delegate 형식에 맞추어 int 변수 하나를 받는 메소드 작성 private void complete(int count) { Console.WriteLine("callback complete" + count); } } class CallBackTEST { //콜백을 전달할 delegate 선언 (인수 전달/) public delegate void onCompleteDele(int i); // 테스트 :: // 타이머가 시작작고 count가 2가 되었을때 콜백! // onComplete 의 매개변수 _callCompleteMethod 의 형식은 앞서 선언한 "onCompleteDele" 이다 public void onComplete(onCompleteDele _callCompleteMethod) { Timer t = new Timer(); t.Interval = 1000; t.Start(); int count = 0; t.Tick += delegate { if (count == 2) //!!콜백발생 _callCompleteMethod(count); ++count; }; } }
 
물론 as3 보다 복잡하긴 하지만 델리게이트를 선언함으로서 비동기 , 동기 처리가 가능하고 , 
인자를 넘기는것도 비교적 단순하다.
그리고 정말 장점은 콜백을 받는 메소드의 인텔리센스를 얻을수 있어 as3와 다르게 실수에 의한 런타임 에러를 방지할수 있다.