델리게이트(delegate)는 C#에서 메서드를 가리키는 참조 타입으로, 메서드를 변수처럼 다룰 수 있게 해주는 기능이다.
델리게이트를 사용하면 특정 메서드를 다른 메서드의 매개변수로 전달하거나, 이벤트 처리 및 콜백 메커니즘을 쉽게 구현할 수 있다.
델리게이트의 주요 개념
- 메서드 참조 : 델리게이트는 특정 메서드를 가리키고, 이 메서드를 변수처럼 호출할 수 있다.
- 형식 안전성 : 델리게이트는 지정된 메서드 시그니처(매개변수 타입과 반환 타입)를 따르므로, 형식 안전하게 메서드를 호출할 수 있다.
- 콜백 및 이벤트 처리 : 델리게이트를 사용하면 비동기 콜백이나 이벤트 기반 프로그래밍을 구현하는 것이 용이하다.
델리게이트 선언과 사용법
델리게이트는 다음과 같이 선언하고 사용할 수 있다.
1. 델리게이트 선언
델리게이트는 메서드의 시그니처(매개변수 타입과 반환 타입)를 정의하는 일종의 타입입니다.
delegate키워드를 사용해 선언한다.// 반환 타입이 void이고, 정수형 매개변수 하나를 받는 델리게이트 정의 public delegate void MyDelegate(int number);이제
MyDelegate타입의 델리게이트 변수를 사용하여 해당 시그니처를 따르는 메서드를 참조할 수 있다.2. 델리게이트 사용 예제
// 델리게이트가 가리킬 메서드 정의 public void PrintNumber(int number) { Console.WriteLine("Number: " + number); } public void Execute() { // 델리게이트 인스턴스 생성 후 메서드 할당 MyDelegate del = PrintNumber; // 델리게이트를 호출하여 메서드 실행 del(10); // 출력: Number: 10 }멀티캐스트 델리게이트
C# 델리게이트는 여러 메서드를 동시에 호출할 수 있다. 이를 멀티캐스트 델리게이트라고 하며, 델리게이트에
+=연산자로 여러 메서드를 추가하면 각 메서드가 순서대로 실행된다.public void PrintNumber(int number) => Console.WriteLine("Number: " + number); public void PrintSquare(int number) => Console.WriteLine("Square: " + (number * number)); public void Execute() { MyDelegate del = PrintNumber; del += PrintSquare; // 멀티캐스트 델리게이트 del(5); // 출력: // Number: 5 // Square: 25 }델리게이트의 실용적인 활용 예
1. 콜백 함수
델리게이트를 사용하여 콜백 메서드를 매개변수로 전달할 수 있다. 예를 들어, 특정 작업이 완료된 후 호출할 메서드를 콜백으로 전달할 수 있다.
public void Process(int number, MyDelegate callback) { Console.WriteLine("Processing " + number); callback(number); } // 콜백을 전달하여 메서드 호출 Process(10, PrintSquare); // 출력: Processing 10, Square: 1002. 이벤트 처리
델리게이트는 C#의 이벤트(Event)와도 밀접한 관련이 있다.
이벤트는 내부적으로 델리게이트를 사용하여 특정 시점에 지정된 메서드를 호출하는 메커니즘을 구현한다.
Func와Action델리게이트C#에는 기본적으로 제공되는 델리게이트 타입이 있다.
Action: 반환값이 없는 메서드를 위한 델리게이트.Func: 반환값이 있는 메서드를 위한 델리게이트.이들은 델리게이트를 정의하지 않고도 메서드를 참조할 수 있도록 도와주며, 다양한 매개변수와 반환 타입을 지원하여 코드 재사용성을 높인다.
요약
- 델리게이트는 C#에서 메서드 참조를 위한 참조 타입.
- 형식 안전성을 제공하며, 메서드를 변수처럼 사용 가능.
- 멀티캐스트 델리게이트로 여러 메서드를 동시에 호출 가능.
- 콜백, 이벤트, 비동기 작업 처리 등에 유용하게 사용.
델리게이트는 C#의 강력한 기능 중 하나로, 코드의 유연성과 확장성을 크게 높여준다.