Unity3d C# toolba 사용해보기

C# 델리게이트를 알아보겠습니다. (delegate)

C# 델리게이트라는 말은 정말 생소하네요.. 설명하기를 대리인? 으로 표현을 하고있습니다.  

어떤사람에게 전화를 걸었는데 자리에 없어서 다른사람이 받았는데 메모를 남겼더니 그 사람이 오고서 저한테 전화를 하는거죠..  중간에 대신 일을 받아 메모를 전달한 사람이 델리게이트라고 합니다.

CallBack이라고하죠..

이것의 특징은 메소드를 참조하는것입니다.   이것의 주소를 할당해서 갖고있다가 이것을 호출하게되면   녀석이 해당하는 주소를 호출하는 구조로되어있습니다.  객체지향언어서 참조를 밥먹듯이 하니.. 참조에관한 문법들이 정말 복잡하고 많습니다. 그게 객체지향언어이지요..ㅜㅜ

선언하는 방법 역시 Method와 관련되어있기때문에 메소드를 정말 많이 닮아있습니다. 정말 좋은데.. 햇갈리네요.. 눈여겨보는 수 밖에..


C#delegate1


이것을 써먹으려면.. 조건이 2가지가 있습니다. 
1. 매개변수의 타입과 숫자가 같아야한다.
2. 반환형식이 같아야한다.

일단 위에 예로 선언한 것을 본다면..   int형 반환에.. 매개변수는 int형으로 2개입니다.
그렇다면..  아래처럼 선언한 메소드같은경우 반환형식과 매개변수타입과 갯수가 같기때문에 사용할 수 있겠네요


C#delegate2



사용하려면 이렇게 합니다.

Mytest Callback;   //위에 처음에 선언한 delegate 타입으로 선언한 이름이  Mytest였죠..?

Callback = new Mytest( Add );                    //Method를 넣어주네요.. 메소드를 참조한다는 말이 이해가  가죠?
Console.WriteLine(Callback(7,8) );              //해당메소드의 매개변수를 넣어 처리해주네요.. 주의깊게 봐야겠습니다.

뭣하러.. 번거롭게.. Callback을 선언해서 Method를 참조시키고.. 값을 대입해서 출력을 하죠??  그냥 참조해서 출력해버리면.. 끝인데.. 코드가 한줄이 더 늘어났네요..

그쵸!!!!  이런 단순한 출력에는 효율적인 코드가 아닌게 확실한데요..    효과를 크게 보는 상황이 있으니깐 지면을 여러페이지 할애하면서 알려주는것이겠죠?

메소드를 만들때 델리게이트타입을 매개변수로 사용하는 것을 만들 수 있을것인데요..    이런상황에서 .. 들어오는 값에 따라 내용이 달라지도록 프로그래밍이 가능한 방법을 .. 이 책의 저자는 이야기 하고 싶어하는것 같습니다.



C#delegate3


예제를 한번 돌려보겠습니다.


C#delegate4

결과에서 보여지는것 처럼.. 델리게이트를 매개변수로 같은 메소드에 조건을 변경해서 호출해서 실행하였더니.. 만들어놓은 배열안의 값들이 오름차순과 내림차순의 정렬이 됩니다!   그래서 결과를 찍어보니.. 위에처럼 잘 적용이되서 나오네요.. 좀 복잡하기는 한데요.. 저는 아직 잘 모르겠네요 ㅜㅜ 이런거 자유자재로 사용할 수 있는 날이 언제즘 올까요? 

이상으로 C# delegate 에 대해 알아봤습니다.







댓글