반응형
객체지향 - 델리게이트 (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 키워드를 사용해 정의하는 여타 다른 타입들과는 달리 델리게이트 타입은 비교적 간단하게 정의할 수 있다.
그것은 델리게이트가 메서드를 가리킬 수 있는 닷넷의 내부에 이미 존재하는 타입에 대한 간편 표기이기 때문이다.
즉 델리게이트를 어떤 클래스 내에서 선언하면 중첩 클래스가 만들어진 것과 다름없다.
반응형
'C#' 카테고리의 다른 글
[C# / 객체지향] 9. 추상 클래스 (Abstract Class) (0) | 2020.01.20 |
---|---|
[C#] 은행 게임 코드 (수정본) (0) | 2020.01.17 |
[C# / 게임] 은행 게임 만들어보기 (객체지향 정리) (0) | 2020.01.16 |
[C# / 객체지향] 8. 다형성 - 오버로드 (Method Overload) (0) | 2020.01.08 |
[C# / 객체지향] 8. 다형성 - 메서드 오버라이드 (Method Override) (0) | 2019.12.19 |