C# 프로그래밍에서 델리게이트와 이벤트는 이벤트 기반 프로그래밍을 구현하는 데 필수적인 요소입니다. 이들은 메서드를 매개변수로 전달할 수 있는 유연한 방법을 제공하여 비동기 작업이나 UI 이벤트를 처리할 때 특히 유용합니다. 이번 포스트에서는 델리게이트와 이벤트의 개념을 이해하고, 이를 활용한 프로그래밍 기법을 살펴보겠습니다.
델리게이트 이해하기
델리게이트는 타입 안전한 함수 포인터로, 가리킬 수 있는 메서드의 시그니처를 정의합니다. 이는 반환 타입과 매개변수를 지정하여, 특정 메서드 호출을 캡슐화할 수 있습니다.
델리게이트 정의하기
델리게이트는 다음과 같이 정의할 수 있습니다:
public delegate void Notify(string message);
델리게이트 사용하기
델리게이트의 인스턴스를 생성하고, 그 시그니처와 일치하는 메서드를 할당할 수 있습니다.
public class ProcessBusinessLogic
{
public void Process(int value)
{
// 비즈니스 로직 처리...
// 델리게이트를 통한 알림
Notify?.Invoke("Process completed with value: " + value);
}
public event Notify Notify; // 델리게이트 기반의 이벤트 선언
}
class Program
{
static void Main(string[] args)
{
ProcessBusinessLogic process = new ProcessBusinessLogic();
process.Notify += (message) => Console.WriteLine(message); // 람다 표현식을 사용한 구독
process.Process(10); // 출력: Process completed with value: 10
}
}
C#의 이벤트
이벤트는 델리게이트 위에 구축되어 클래스 간의 통신 방법을 제공합니다. 이벤트는 애플리케이션의 한 부분(발행자)이 다른 부분(구독자)에게 무언가가 발생했음을 알릴 수 있게 합니다.
이벤트 선언하기
C#에서 event 키워드와 델리게이트 타입을 사용하여 이벤트를 선언합니다.
public class Publisher
{
public event Notify OnNotify;
public void DoSomething()
{
OnNotify?.Invoke("Event triggered!");
}
}
class Subscriber
{
public void Subscribe(Publisher publisher)
{
publisher.OnNotify += (message) => Console.WriteLine(message); // 람다 표현식을 사용한 구독.
}
}
class Program
{
static void Main()
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub);
pub.DoSomething(); // 출력: Event triggered!
}
}
람다 표현식
람다 표현식은 별도의 명명된 메서드를 명시적으로 정의하지 않고도 인라인 메서드를 작성할 수 있는 간결한 방법을 제공합니다. 이는 델리게이트나 LINQ 쿼리를 다룰 때 코드가 더 깔끔하고 읽기 쉽게 만듭니다.
람다 표현식의 문법
(parameters) => expression_or_statement_block;
델리게이트에서의 예제 사용
이벤트를 구독할 때 람다 표현식을 사용했습니다:
publisher.OnNotify += (message) => Console.WriteLine(message);
이는 알림을 처리하기 위한 별도의 메서드를 생성하는 대신 사용할 수 있는 방법입니다.
다중 매개변수 예제
람다 표현식 내에서 여러 매개변수를 사용할 수도 있습니다:
Func<int, int, int> add = (x, y) => x + y;
Console.WriteLine(add(5,3)); // 출력: 8
요약
델리게이트와 이벤트는 C#에서 프로그램의 다양한 부분이 콜백을 통해 통신할 수 있도록 하는 기본 개념입니다. 람다 표현식은 이러한 기능을 강화하여 추가적인 명명된 메서드 없이도 콜백을 간결하게 정의할 수 있게 합니다. 이들은 함께 반응형 사용자 인터페이스나 비동기 처리 기능이 필요한 견고한 애플리케이션을 개발하는 데 필수적인 구성 요소를 형성합니다.
'프로그래밍 > C#' 카테고리의 다른 글
| LINQ 메서드 구문으로 C# 데이터 조작 마스터하기 (0) | 2025.09.02 |
|---|---|
| LINQ: C#에서 데이터 쿼리의 혁신 (1) | 2025.09.01 |
| C#에서 델리게이트와 이벤트의 이해와 활용 (0) | 2025.08.31 |
| C#에서 대리자와 이벤트의 중요성 및 활용 방법 (0) | 2025.08.31 |
| C#에서 파일 I/O와 직렬화의 중요성 및 실용적인 활용법 (0) | 2025.08.30 |