C#

[C# / 객체지향] 델리게이트 (Delegate)

무하지 2020. 3. 11. 16:38
반응형

객체지향 - 델리게이트 (Delegate)

 

델리게이트는 직역하면 대리자이다.

 

정확히는 함수를 대리하므로 함수 대리자이다.

 

int, short 같은 타입은 정수를 가질 수 있지만, 델리게이트 타입은 함수를 가질 수 있다.

 

 

위와 같은 함수를 가지는 델리게이트 타입을 만들어보자.

 

델리게이트 타입을 만들 때는 대리할 함수의 반환값과 매개변수를 일치하게 해야한다.

 

Say 함수의 반환 타입이 void이고 매개변수 타입이 string이므로 아래와 같이 선언해주자.

 

delegate void MyDelegate(string txt);

이렇게 하면 MyDelegate 라는 타입이 만들어진다.

 

이 타입은 반환 형식이 void이고 string 타입을 매개변수로 받는 함수를 대리할 수 있다.

 

이제 이 타입에 say 함수를 넣어보자.

 

MyDelegate sayFunction = new MyDelegate(Say);

이제 sayFunction 타입은 Say 함수를 가리킨다.

 

따라서 함수처럼 사용할 수 있다.

 

 

단순히 Say("hello, world"); 처럼 바로 사용할 수도 있겠지만, 함수를 매개변수로 또 다른 함수에 넘겨주거나,

 

함수의 반환값으로 함수를 사용하고 싶을 때는 델리게이트가 유용하게 쓰인다.

 

델리게이트에 함수를 할당할 때 더 간단한 문법을 사용할 수도 있다.

 

다음의 두 구문은 완전히 같은 역할을 수행한다.

 

MyDelegate sayFunction = new MyDelegate(Say);
MyDelegate sayFunction = Say;

 

Class 키워드를 사용해 정의하는 여타 다른 타입들과는 달리 델리게이트 타입은 비교적 간단하게 정의할 수 있다.

 

그것은 델리게이트가 메서드를 가리킬 수 있는 닷넷의 내부에 이미 존재하는 타입에 대한 간편 표기이기 때문이다.

 

즉 델리게이트를 어떤 클래스 내에서 선언하면 중첩 클래스가 만들어진 것과 다름없다.

반응형