C#의 대리자 및 이벤트 소개

대리자는 .NET에서 런타임에 바인딩 메커니즘을 제공합니다. 런타임에 바인딩은 호출자가 알고리즘의 일부를 구현하는 하나 이상의 메서드도 제공하는 알고리즘을 만든다는 의미입니다.

예를 들어 천문학 애플리케이션에서 별 목록을 정렬한다는 가정해 보세요. 이러한 별은 지구로부터의 거리, 별의 크기, 인식된 밝기 등에 따라 정렬할 수 있습니다.

모든 경우에 Sort() 메서드는 기본적으로 동일한 작업을 수행합니다. 즉, 몇 가지 비교를 통해 목록의 항목을 정렬합니다. 별 두 개를 비교하는 코드는 각 정렬 순서마다 다릅니다.

이러한 종류의 솔루션이 반세기 동안 소프트웨어에서 사용되었습니다. C# 언어 대리자 개념은 최고 수준의 언어 지원 및 해당 개념 관련 형식 안정성을 제공합니다.

이 시리즈의 뒷부분에서 볼 수 있듯이 이와 같은 알고리즘에 대해 작성하는 C# 코드는 형식이 안전합니다. 컴파일러는 형식이 인수 및 반환 형식과 일치하는지 확인합니다.

함수 포인터는 호출 규칙에 대한 더 많은 제어가 필요한 유사한 시나리오를 지원합니다. 대리자와 연결된 코드는 대리자 형식에 추가된 가상 메서드를 사용하여 호출됩니다. 함수 포인터를 사용하여 다른 규칙을 지정할 수 있습니다.

대리자의 언어 디자인 목표

언어 디자이너는 결국 대리자가 된 기능에 대해 여러 가지 목표를 열거했습니다.

팀은 런타임에 바인딩 알고리즘에 사용할 수 있는 공용 언어 구문을 원했습니다. 대리자를 통해 개발자는 하나의 개념을 익히고 여러 가지 다양한 소프트웨어 문제에서 동일한 개념을 사용할 수 있습니다.

두 번째로 팀은 단일 및 멀티캐스트 메서드 호출을 모두 지원하기를 원했습니다. (멀티캐스트 대리자는 여러 메서드 호출을 함께 연결하는 대리자입니다. 예제는 이 시리즈의 뒷부분에서 확인할 수 있습니다.)

팀은 개발자가 모든 C# 구문에서 기대하는 동일한 형식 안전성을 대리자가 지원하기를 원했습니다.

마지막으로 팀은 이벤트 패턴이 대리자 또는 지연 바인딩 알고리즘이 유용한 하나의 특정 패턴임을 인식했습니다. 팀은 대리자에 대한 코드가 .NET 이벤트 패턴의 기반을 제공할 수 있도록 하려고 했습니다.

이러한 모든 작업의 결과가 C# 및 .NET의 대리자와 이벤트 지원이었습니다.

이 시리즈의 나머지 문서에서는 대리자 및 이벤트로 작업할 때 사용되는 언어 기능, 라이브러리 지원 및 일반적인 관용구를 다룹니다. 다음에 대해 알아봅니다.

  • delegate 키워드 및 해당 키워드에서 생성하는 코드입니다.
  • System.Delegate 클래스의 기능 및 해당 기능이 사용되는 방법입니다.
  • 형식이 안전한 대리자를 만드는 방법입니다.
  • 대리자를 통해 호출할 수 있는 메서드를 만드는 방법입니다.
  • 람다 식을 사용하여 대리자 및 이벤트로 작업하는 방법입니다.
  • 대리자가 LINQ의 구성 요소 중 하나가 되는 방법입니다.
  • 대리자가 .NET 이벤트 패턴의 기초가 되는 방식과 대리자의 차이점입니다.

시작하겠습니다.

다음