2021. 1. 25. 07:51ㆍ개발/C#
델리게이트(Delegate)는 메서드의 대리자 객체를 만들고 다른 메서드에 전달하여,
다른 메서드에서 대리자 (콜백 메서드)가 동작하게 하는 방법이다.
델리게이트 원형과 메서드의 리턴 타입과 매개변수 타입이 일치해야한다.
델리게이트를 왜 사용하는가?
1.어떤 변수가 아닌 실행가능한 코드 (콜백) / 즉 대리자 객체를 전달하기 위해서 사용된다.
이런 방법은 단순히 메서드를 넘겨서 그 메서드를 실행시키게 하는 것 이상으로
LINQ 구문에서 람다식을 사용하거나, 또는 간단하게 람다식이나 무명메서드를 통해 함수를 작성하여
좀 더 코드를 효율적으로 작성할 수 있게 해준다.
2.이벤트에 등록할 이벤트 핸들러를 전달할 때 델리게이트가 사용된다.
(ex) btn.Click += new EventHandler(btn_Click);
여기서 Click은 이벤트 , EventHandler는 델리게이트 객체, btn_Click은 객체가 담는 콜백 메서드이다.
3.델리게이트 체인을 사용하여 프로그램을 구현할 수 있다.
콜백(callback)은 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다.
전달하는 델리게이트 객체가 콜백 (콜백 함수)이 된다.
보통 이벤트핸들러처럼 나중에 실행되는 함수,
특정 이벤트 (조건) 발생시에 비동기로 동작하는 콜백을 콜백 함수라고한다
델리게이트를 정의한다는 것은 , 어떤 리턴 타입과 어떤 자료형의 매개변수를 가지는
메서드를 넘겨줄지 (메서드의 대리자 변수) 를 정의하는 것이다.
예를 들어 int를 리턴하고, int를 매개변수로 받는 델리게이트를
public delegate int IntDelegate(int s); 이렇게 정의하면
public string Method(IntDelegate ID){} 이런 메서드에 델리게이트로
public int IntMethod(int s){} 이런 메서드를 넣을 수 있다.
여기서 IntDelegate라는 델리게이트는 IntMethod의 대리자가 되어
같은 리턴 타입과 같은 매개변수형을 가진 intMethod를 대리하는 매개변수가 된다.
결과적으로 Method(IntMethod) 형태로 실행을 하게 된다.
또한 IntMethod가 받는 매개변수는 델리게이트를 호출하는 메서드인 Method 내에서 제공한다.
.NET에서는 자주 사용되는 Delegate 원형들을 미리 정의해두었는데
이 중에 많이 사용되는 Generic Delegate로는 Action, Func, Predicate 등이 있다.
Func<>는 리턴 값을 가지는 Delegate이며, 입력값은 0-16개 가질 수 있다.
예를 들어 Func<int, string>이라면, 마지막 string은 리턴값, 나머지는 모두 입력 파라미터
Action은 항상 void를 리턴한다. Action<int, string>이라면, 2개 모두 입력 파라미터
아래에서는 List<int> Filter(Delegate dele)가 아니라, List<int> Filter(Func<int, bool>)로
Filter 메서드를 정의했는데,
미리 델리게이트를 정의하고, 정의한 대리자 변수를 사용하느냐
아니면 델리게이트 원형을 사용하느냐의 차이,
즉 델리게이트를 만들어서 쓰느냐, 있는 것을 쓰느냐의 차이일 뿐이다.
마찬가지로 매개변수, 리턴타입만 맞춰주면 어떤 메서드든 넣을 수 있다.
'개발 > C#' 카테고리의 다른 글
# 접근 제한자 (접근 한정자) (0) | 2021.01.25 |
---|---|
# AS (형 변환) / IS (타입 확인) 키워드 (0) | 2021.01.25 |
# Static (정적) 메서드 (0) | 2021.01.25 |
# 변수 / 값 타입 & 참조 타입 (0) | 2021.01.25 |
# Invoke() (인보크 메서드) (0) | 2021.01.25 |