[C#] 델리게이트 (delegate)
델리게이트란?
델리게이트는 메소드에 대한 참조이다.
델리게이트에 메소드의 주소를 할당한 후
델리게이트를 호출하면 이 델리게이트가
메소드를 호출해준다.
언제 사용하는가?
프로그래밍을 하다 보면 '값'이 아닌 '코드'를 매개 변수로 넘기고
싶을 때가 있다. 배열을 정렬하는 메소드를 예로 들자면,
이 메소드가 오름차순으로 정렬할 것인지, 내림차순으로
정렬할 것인지, 아니면 특별한 계산식에 의해 정렬할 것인지
이 메소드가 정렬을 수행할 때 사용하는 비교 루틴을
매개 변수로 넣을 수 있다면 아주 유연한 프로그램이 될 것이다.
이에 대한 예시는 밑에서 다시 다루도록 하겠다.
C++ STL의 알고리즘에 함수 포인터를
이용한 콜백 메커니즘이 사용되는데
델리게이트 또한 이 함수포인터와
유사하다고 생각하면 될 듯하다.
한정자 delegate 반환형식 델리게이트 이름 ( 매개변수 목록 );
ex) delegate int MyDelegate ( int a , int b);
--> 참조할 메소드의 반환 형식과 매개 변수를 명히해줘야 한다.
--> 델리게이트는 인스턴스가 아닌 형식이다.
--> 따라서 MyDelegate의 인스턴스를 따로 만들어야 한다.
ex)
int Plus (int a, int b){ ... }
MyDelegate CallBack;
CallBack = new MyDelegate(Plus);
--> new 연산자를 사용하여 인스턴스를 만든다.
ex)
결과
오늘은 C#의 델리게이트(delegate)에 대해 알아보았다.
그냥 함수 포인터인 것 같다. (아직까지는..)
다음 시간에는 일반화된 델리게이트에 대해 알아보겠다.
'C#, 유니티' 카테고리의 다른 글
[C#] 익명 메소드 (0) | 2017.03.05 |
---|---|
[C#] 일반화 델리게이트 (0) | 2017.03.05 |
[C#] 인덱서 (Indexer) (0) | 2017.03.02 |
[C#] 상속 관계에 있는 클래스의 형변환 ( is , as ) (0) | 2017.02.21 |
[유니티 포트폴리오] Wingz Defense , Red Sniper (0) | 2017.02.20 |