대리자(C# 프로그래밍 가이드)Delegates (C# Programming Guide)

대리자는 특정 매개 변수 목록 및 반환 형식이 있는 메서드에 대한 참조를 나타내는 형식입니다.A delegate is a type that represents references to methods with a particular parameter list and return type. 대리자를 인스턴스화하면 모든 메서드가 있는 인스턴스를 호환되는 시그니처 및 반환 형식에 연결할 수 있습니다.When you instantiate a delegate, you can associate its instance with any method with a compatible signature and return type. 대리자 인스턴스를 통해 메서드를 호출할 수 있습니다.You can invoke (or call) the method through the delegate instance.

대리자는 메서드를 다른 메서드에 인수로 전달하는 데 사용됩니다.Delegates are used to pass methods as arguments to other methods. 이벤트 처리기는 대리자를 통해 호출되는 메서드라고 할 수 있습니다.Event handlers are nothing more than methods that are invoked through delegates. 사용자 지정 메서드를 만들면 Windows 컨트롤 같은 클래스가 특정 이벤트가 발생했을 때 해당 메서드를 호출할 수 있습니다.You create a custom method, and a class such as a windows control can call your method when a certain event occurs. 다음 예제에서는 대리자 선언을 보여 줍니다.The following example shows a delegate declaration:

public delegate int PerformCalculation(int x, int y);

액세스 가능한 클래스 또는 대리자 형식과 일치하는 구조의 모든 메서드는 대리자에 할당할 수 있습니다.Any method from any accessible class or struct that matches the delegate type can be assigned to the delegate. 메서드는 정적 메서드이거나 인스턴스 메서드일 수 있습니다.The method can be either static or an instance method. 메서드를 대리자에 할당하면 프로그래밍 방식으로 메서드 호출을 변경하고 기존 클래스에 새 코드를 삽입할 수 있습니다.This makes it possible to programmatically change method calls, and also plug new code into existing classes.

참고

메서드 오버로드의 컨텍스트에서는 메서드 시그니처에 반환 값이 포함되지 않지만In the context of method overloading, the signature of a method does not include the return value. 대리자 컨텍스트에서는 시그니처에 반환 값이 포함됩니다.But in the context of delegates, the signature does include the return value. 즉 메서드의 반환 형식이 대리자의 반환 형식과 같아야 합니다.In other words, a method must have the same return type as the delegate.

대리자에서는 이와 같이 메서드를 매개 변수로 취급할 수 있으므로 대리자는 콜백 메서드 정의에 이상적입니다.This ability to refer to a method as a parameter makes delegates ideal for defining callback methods. 예를 들어, 두 개체를 비교하는 메서드에 대한 참조를 정렬 알고리즘에 인수로 전달할 수 있습니다.For example, a reference to a method that compares two objects could be passed as an argument to a sort algorithm. 비교 코드는 별도의 절차이기 때문에 정렬 알고리즘을 보다 일반적인 방식으로 작성할 수 있습니다.Because the comparison code is in a separate procedure, the sort algorithm can be written in a more general way.

대리자 개요Delegates Overview

대리자에는 다음과 같은 속성이 있습니다.Delegates have the following properties:

  • 대리자는 C++ 함수 포인터와 유사하지만 C++ 함수 포인터와 달리 멤버 함수에 대해 완전히 개체 지향입니다. 대리자는 개체 인스턴스 및 메서드를 모두 캡슐화합니다.Delegates are similar to C++ function pointers, but delegates are fully object-oriented, and unlike C++ pointers to member functions, delegates encapsulate both an object instance and a method.

  • 대리자를 통해 메서드를 매개 변수로 전달할 수 있습니다.Delegates allow methods to be passed as parameters.

  • 대리자를 사용하여 콜백 메서드를 정의할 수 있습니다.Delegates can be used to define callback methods.

  • 여러 대리자를 연결할 수 있습니다. 예를 들어 단일 이벤트에 대해 여러 메서드를 호출할 수 있습니다.Delegates can be chained together; for example, multiple methods can be called on a single event.

  • 메서드와 대리자 형식이 정확히 일치할 필요는 없습니다.Methods do not have to match the delegate type exactly. 자세한 내용은 대리자의 가변성 사용을 참조하세요.For more information, see Using Variance in Delegates.

  • C# 버전 2.0에는 별도로 정의된 메서드 대신 코드 블록을 매개 변수로 전달할 수 있도록 하는 무명 메서드라는 개념이 도입되었습니다.C# version 2.0 introduced the concept of Anonymous Methods, which allow code blocks to be passed as parameters in place of a separately defined method. C# 3.0에는 인라인 코드 블록을 더 간단하게 작성할 수 있는 람다 식이 도입되었습니다.C# 3.0 introduced lambda expressions as a more concise way of writing inline code blocks. 특정 컨텍스트에서는 무명 메서드와 람다 식 모두 대리자 형식으로 컴파일됩니다.Both anonymous methods and lambda expressions (in certain contexts) are compiled to delegate types. 이 두 기능을 익명 함수라고 합니다.Together, these features are now known as anonymous functions. 람다 식에 대한 자세한 내용은 익명 함수를 참조하세요.For more information about lambda expressions, see Anonymous Functions.

섹션 내용In This Section

C# 언어 사양C# Language Specification

자세한 내용은 대리자 C# 언어 사양합니다.For more information, see Delegates in the C# Language Specification. 언어 사양은 C# 구문 및 사용법에 대 한 신뢰할 수 있는 소스 됩니다.The language specification is the definitive source for C# syntax and usage.

대리자, Events, and Lambda Expressions C# 3.0 Cookbook, Third Edition: 250 개 이상의 솔루션에 대 한 C# 3.0 프로그래머Delegates, Events, and Lambda Expressions in C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers

대리자 및 이벤트학습 C# 3.0. 기본 사항 마스터 C# 3.0Delegates and Events in Learning C# 3.0: Master the fundamentals of C# 3.0

참고 항목See also