대리자(C# 프로그래밍 가이드)
업데이트: 2007년 11월
대리자는 메서드 시그니처를 정의하는 형식으로, 호환되는 시그니처가 있는 모든 메서드에 연결될 수 있습니다. 대리자를 통해 메서드를 호출할 수 있습니다. 대리자는 메서드를 다른 메서드에 인수로 전달하는 데 사용됩니다. 이벤트 처리기는 대리자를 통해 호출되는 메서드라고 할 수 있습니다. 사용자 지정 메서드를 만들면 Windows 컨트롤 같은 클래스가 특정 이벤트가 발생했을 때 해당 메서드를 호출할 수 있습니다. 다음 예제에서는 대리자 선언을 보여 줍니다.
public delegate int PerformCalculation(int x, int y);
액세스 가능한 클래스 또는 구조체의 메서드 중 대리자의 시그니처(반환 형식과 매개 변수로 구성)가 일치하는 메서드는 모두 대리자에 할당할 수 있습니다. 메서드는 정적 메서드이거나 인스턴스 메서드일 수 있습니다. 메서드를 대리자에 할당하면 프로그래밍 방식으로 메서드 호출을 변경하고 기존 클래스에 새 코드를 삽입할 수 있습니다. 대리자의 시그니처만 알고 있으면 사용자가 작성한 메서드를 할당할 수 있습니다.
참고: |
---|
메서드 오버로드의 컨텍스트에서는 메서드 시그니처에 반환 값이 포함되지 않지만 대리자 컨텍스트에서는 시그니처에 반환 값이 포함됩니다. 즉 메서드의 반환 값이 대리자의 반환 값과 같아야 합니다. |
대리자에서는 이와 같이 메서드를 매개 변수로 취급할 수 있으므로 대리자는 콜백 메서드 정의에 이상적입니다. 예를 들어, 두 개체를 비교하는 메서드에 대한 참조를 정렬 알고리즘에 전달할 수 있습니다. 비교 코드를 분리하면 보다 일반적인 방식으로 알고리즘을 작성할 수 있습니다.
대리자 개요
대리자에는 다음과 같은 속성이 있습니다.
대리자는 C++의 함수 포인터와 유사하지만 형식이 안전합니다.
대리자를 통해 메서드를 매개 변수로 전달할 수 있습니다.
대리자를 사용하여 콜백 메서드를 정의할 수 있습니다.
여러 대리자를 연결할 수 있습니다. 예를 들어 단일 이벤트에 대해 여러 메서드를 호출할 수 있습니다.
메서드와 대리자 시그니처가 정확히 일치할 필요는 없습니다. 자세한 내용은 Covariance and Contravariance대리자의 공변성(Covariance)과 반공변성(Contravariance)(C# 프로그래밍 가이드)을 참조하십시오.
C# 버전 2.0에는 별도로 정의된 메서드 대신 코드 블록을 매개 변수로 전달할 수 있도록 하는 무명 메서드라는 개념이 도입되었습니다. C# 3.0에는 인라인 코드 블록을 더 간단하게 작성할 수 있는 람다 식이 도입되었습니다. 특정 컨텍스트에서는 무명 메서드와 람다 식 모두 대리자 형식으로 컴파일됩니다. 이 두 기능을 익명 함수라고 합니다. 익명 함수에 대한 자세한 내용은 익명 함수(C# 프로그래밍 가이드)를 참조하십시오.
단원 내용
C# 언어 사양
자세한 내용은 C# 언어 사양의 다음 단원을 참조하십시오.
1.11 대리자
4.2.6 대리자 형식
7.5.5.3 대리자 호출
15 대리자