델리게이트(delegate)

2경빈·2024년 11월 7일

C#

목록 보기
2/14

델리게이트(delegate)는 C#에서 메서드를 가리키는 참조 타입으로, 메서드를 변수처럼 다룰 수 있게 해주는 기능이다.

델리게이트를 사용하면 특정 메서드를 다른 메서드의 매개변수로 전달하거나, 이벤트 처리 및 콜백 메커니즘을 쉽게 구현할 수 있다.

델리게이트의 주요 개념

  1. 메서드 참조 : 델리게이트는 특정 메서드를 가리키고, 이 메서드를 변수처럼 호출할 수 있다.
  2. 형식 안전성 : 델리게이트는 지정된 메서드 시그니처(매개변수 타입과 반환 타입)를 따르므로, 형식 안전하게 메서드를 호출할 수 있다.
  3. 콜백 및 이벤트 처리 : 델리게이트를 사용하면 비동기 콜백이나 이벤트 기반 프로그래밍을 구현하는 것이 용이하다.

델리게이트 선언과 사용법

델리게이트는 다음과 같이 선언하고 사용할 수 있다.

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: 100

2. 이벤트 처리

델리게이트는 C#의 이벤트(Event)와도 밀접한 관련이 있다.
이벤트는 내부적으로 델리게이트를 사용하여 특정 시점에 지정된 메서드를 호출하는 메커니즘을 구현한다.

FuncAction 델리게이트

C#에는 기본적으로 제공되는 델리게이트 타입이 있다.

  • Action : 반환값이 없는 메서드를 위한 델리게이트.
  • Func : 반환값이 있는 메서드를 위한 델리게이트.

이들은 델리게이트를 정의하지 않고도 메서드를 참조할 수 있도록 도와주며, 다양한 매개변수와 반환 타입을 지원하여 코드 재사용성을 높인다.

요약

  • 델리게이트는 C#에서 메서드 참조를 위한 참조 타입.
  • 형식 안전성을 제공하며, 메서드를 변수처럼 사용 가능.
  • 멀티캐스트 델리게이트로 여러 메서드를 동시에 호출 가능.
  • 콜백, 이벤트, 비동기 작업 처리 등에 유용하게 사용.

델리게이트는 C#의 강력한 기능 중 하나로, 코드의 유연성과 확장성을 크게 높여준다.

profile
eggs before hatching

0개의 댓글