[C#] 델리게이트(Delegate)의 다양한 사용법
안녕하세요! 이번 포스트에서는 C#의 델리게이트(Delegate)에 대해 다양한 사용법을 중심으로 알아보겠습니다. 델리게이트는 메서드를 참조할 수 있는 형식으로, 이벤트 처리, 콜백 메서드, 비동기 프로그래밍 등 다양한 시나리오에서 활용됩니다.
델리게이트의 기본 개념
델리게이트는 메서드의 참조를 캡슐화하는 형식입니다. 델리게이트를 사용하면 메서드를 다른 메서드에 전달하거나, 런타임에 메서드를 동적으로 변경할 수 있습니다.
델리게이트 선언
public delegate void MyDelegate(int x, int y);
위 예시에서 MyDelegate는 두 개의 int 매개변수를 가지며 void를 반환하는 메서드를 참조할 수 있는 델리게이트입니다.
델리게이트의 사용법
1. 기본 사용법
델리게이트는 특정 메서드를 참조하고, 그 메서드를 호출할 수 있습니다.
public delegate void MyDelegate(int x, int y);
public class Program
{
static void Main(string[] args)
{
MyDelegate del = new MyDelegate(Add);
del(10, 20); // Output: 30
}
static void Add(int a, int b)
{
Console.WriteLine(a + b);
}
}
위 예시에서 MyDelegate는 Add 메서드를 참조하고, del(10, 20)를 통해 Add 메서드를 호출합니다.
2. 멀티캐스트 델리게이트
델리게이트는 여러 메서드를 호출할 수 있는 멀티캐스트 기능을 제공합니다.
public delegate void MyDelegate(int x, int y);
public class Program
{
static void Main(string[] args)
{
MyDelegate del = new MyDelegate(Add);
del += Subtract;
del(10, 20); // Output: 30, -10
}
static void Add(int a, int b)
{
Console.WriteLine(a + b);
}
static void Subtract(int a, int b)
{
Console.WriteLine(a - b);
}
}
위 예시에서 del 델리게이트는 Add와 Subtract 메서드를 모두 호출합니다.
3. 익명 메서드와 람다 식
델리게이트는 익명 메서드나 람다 식을 사용하여 간결하게 메서드를 정의할 수 있습니다.
public delegate void MyDelegate(int x, int y);
public class Program
{
static void Main(string[] args)
{
MyDelegate del = delegate (int a, int b)
{
Console.WriteLine(a + b);
};
del(10, 20); // Output: 30
MyDelegate del2 = (a, b) => Console.WriteLine(a * b);
del2(10, 20); // Output: 200
}
}
위 예시에서 익명 메서드와 람다 식을 사용하여 델리게이트를 정의하고 호출합니다.
4. Func, Action, Predicate 델리게이트
C#은 미리 정의된 델리게이트 형식인 Func, Action, Predicate를 제공합니다.
- Func: 반환 값을 가지는 델리게이트.
- Action: 반환 값이 없는 델리게이트.
- Predicate: 특정 조건을 검사하여 불리언 값을 반환하는 델리게이트.
class Program
{
static void Main(string[] args)
{
Func<int, int, int> add = (a, b) => a + b;
Console.WriteLine(add(10, 20)); // Output: 30
Action<string> print = message => Console.WriteLine(message);
print("Hello, World!"); // Output: Hello, World!
Predicate<int> isEven = num => num % 2 == 0;
Console.WriteLine(isEven(10)); // Output: True
}
}
위 예시에서 Func, Action, Predicate 델리게이트를 사용하여 메서드를 정의하고 호출합니다.
델리게이트의 활용 사례
1. 이벤트 처리
델리게이트는 이벤트를 처리하는 데 주로 사용됩니다. 이벤트는 델리게이트를 기반으로 정의되며, 이벤트 발생 시 호출할 메서드를 등록할 수 있습니다.
public delegate void MyEventHandler(string message);
public class Publisher
{
public event MyEventHandler MyEvent;
public void RaiseEvent(string message)
{
MyEvent?.Invoke(message);
}
}
public class Subscriber
{
public void OnEventRaised(string message)
{
Console.WriteLine($"Event received: {message}");
}
}
class Program
{
static void Main(string[] args)
{
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();
publisher.MyEvent += subscriber.OnEventRaised;
publisher.RaiseEvent("Hello, Events!"); // Output: Event received: Hello, Events!
}
}
위 예시에서 Publisher 클래스는 MyEvent라는 이벤트를 정의하고, 이벤트가 발생할 때 OnEventRaised 메서드를 호출합니다.
2. 콜백 메서드
델리게이트는 콜백 메서드를 구현하는 데 유용합니다. 콜백 메서드는 특정 작업이 완료된 후 호출되는 메서드입니다.
public delegate void CallbackDelegate(string message);
public class Processor
{
public void Process(CallbackDelegate callback)
{
// Some processing logic
callback("Processing completed.");
}
}
class Program
{
static void Main(string[] args)
{
Processor processor = new Processor();
processor.Process(result => Console.WriteLine(result)); // Output: Processing completed.
}
}
위 예시에서 Process 메서드는 콜백 델리게이트를 받아서 작업이 완료된 후 콜백을 호출합니다.
마치며
이번 포스트에서는 C#의 델리게이트(Delegate)에 대해 다양한 사용법을 알아보았습니다. 델리게이트는 메서드를 참조할 수 있는 형식으로, 이벤트 처리, 콜백 메서드, 비동기 프로그래밍 등 다양한 시나리오에서 활용됩니다. 델리게이트를 적절히 활용하면 코드의 유연성을 높이고, 모듈화된 코드를 작성할 수 있습니다. 추가적인 질문이나 궁금한 점이 있다면 언제든지 댓글로 남겨주세요!
'Programming > C#' 카테고리의 다른 글
C# 예외 처리 안전한 프로그램을 위한 필수 기술 (0) | 2024.06.10 |
---|---|
C# LINQ 데이터 쿼리의 일관된 방식 (0) | 2024.06.09 |
C# 델리게이트(Delegate) 메서드 참조의 강력한 도구 (0) | 2024.06.09 |
C# 구조체(Struct) 경량화된 값 형식 (0) | 2024.06.09 |
C# 인덱서(Indexer) 배열과 유사한 접근성 제공 (0) | 2024.06.09 |