대리자는 .NET에서 지연 바인딩 메커니즘을 제공합니다. 지연 바인딩은 호출자가 알고리즘의 일부를 구현하는 하나 이상의 메서드를 제공하는 알고리즘을 만드는 것을 의미합니다.
예를 들어 천문학 응용 프로그램에서 별 목록을 정렬하는 것이 좋습니다. 당신은 지구에서 자신의 거리, 또는 별의 크기, 또는 인식 된 밝기로 그 별을 정렬하도록 선택할 수 있습니다.
이러한 모든 경우에서 Sort() 메서드는 기본적으로 동일한 작업을 수행합니다. 일부 비교에 따라 목록의 항목을 정렬합니다. 두 개의 별을 비교하는 코드는 각 정렬 순서에 따라 다릅니다.
이러한 종류의 솔루션은 반세기 동안 소프트웨어에서 사용되어 왔습니다. C# 언어 대리자 개념은 첫 번째 클래스 언어 지원 및 개념에 대한 형식 안전을 제공합니다.
이 시리즈의 뒷부분에서 볼 수 있듯이 이와 같은 알고리즘에 대해 작성하는 C# 코드는 형식이 안전합니다. 컴파일러는 형식이 인수 및 반환 형식과 일치하는지 확인합니다.
함수 포인터는 유사한 시나리오에서 호출 규칙을 보다 더 세밀하게 제어할 수 있도록 지원합니다. 대리자 형식에 추가된 가상 메서드를 사용하여 대리자와 연결된 코드가 호출됩니다. 함수 포인터를 사용하여 다른 규칙을 지정할 수 있습니다.
대리자를 위한 언어 디자인 목표
언어 디자이너는 결국 대리자가 된 기능에 대한 몇 가지 목표를 열거했습니다.
팀은 모든 늦은 바인딩 알고리즘에 사용할 수 있는 공용 언어 구문을 원했습니다. 대리인을 사용하면 개발자가 하나의 개념을 학습하고 다양한 소프트웨어 문제에서 동일한 개념을 사용할 수 있습니다.
둘째, 팀은 단일 및 멀티캐스트 메서드 호출을 모두 지원하려고 했습니다. (멀티캐스트 대리자는 여러 메서드 호출을 연결하는 대리자입니다. 이 시리즈의 후반부에서 예제를 볼 수 있습니다.)
팀은 대리인이 개발자가 모든 C# 구문에서 기대하는 것과 동일한 형식 안전을 지원하기를 원했습니다.
마지막으로 팀은 이벤트 패턴이 대리자 또는 지연 바인딩 알고리즘이 유용한 하나의 특정 패턴임을 인식했습니다. 팀은 대리자에 대한 코드가 .NET 이벤트 패턴의 기초를 제공할 수 있도록 하고자 했습니다.
모든 작업의 결과는 C# 및 .NET의 대리자 및 이벤트 지원이었습니다.
이 시리즈의 나머지 문서에서는 대리자 및 이벤트를 사용할 때 사용되는 언어 기능, 라이브러리 지원 및 일반적인 관용구를 다룹니다. 학습 내용은 다음과 같습니다.
-
delegate
키워드 및 생성되는 코드입니다. - 클래스의
System.Delegate
기능 및 해당 기능을 사용하는 방법. - 형식이 안전한 대리자를 만드는 방법
- 대리자를 통해 호출할 수 있는 메서드를 만드는 방법입니다.
- 람다 식을 사용하여 대리자와 이벤트를 다루는 방법.
- 대리자가 LINQ의 구성 요소 중 하나가 되는 방법
- 대리자가 .NET 이벤트 패턴의 기초가 되는 방식과 대리자가 어떻게 다른지.
시작해 보겠습니다.
.NET