728x90
반응형
C# 이벤트와 델리게이트 완전 정복
C#에서는 이벤트(Event) 와 델리게이트(Delegate) 를 사용해 객체 간 통신을 매우 유연하게 만들 수 있습니다.
특히 UI 프로그래밍이나 비동기 작업에서 많이 사용되죠.
이번 글에서는 델리게이트와 이벤트의 기본 개념과 사용법을 정리해봅니다.
1. 델리게이트 (Delegate)
델리게이트란?
델리게이트는 메서드를 참조하는 타입입니다.
쉽게 말해, 메서드를 변수처럼 저장하거나 호출할 수 있게 해줍니다.
'함수 포인터'라고 생각하면 이해가 빠릅니다.
기본 선언과 사용
// 델리게이트 선언
public delegate void MyDelegate(string message);
// 메서드 정의
public void ShowMessage(string msg)
{
Console.WriteLine("메시지: " + msg);
}
// 델리게이트 사용
MyDelegate del = ShowMessage;
del("Hello, Delegate!");
- MyDelegate는 string을 받아서 void를 반환하는 메서드를 참조할 수 있습니다.
- ShowMessage 메서드를 del 변수에 할당하고 호출합니다.
무명 메서드(Anonymous Method)
MyDelegate del = delegate(string msg)
{
Console.WriteLine("익명 메서지: " + msg);
};
람다식(Lambda Expression)
MyDelegate del = (msg) => Console.WriteLine("람다 메세지: " + msg);
2. 이벤트 (Event)
이벤트란?
이벤트는 특정 상황이 발생했을 때 알림을 보내는 메커니즘입니다.
- 델리게이트를 기반으로 만들어짐
- 외부 객체는 이벤트를 구독(Subscribe)하고, 이벤트가 발생하면 알림을 받음
이벤트 선언과 사용
// 델리게이트 타입 정의
public delegate void Notify();
// 이벤트 선언
public class Process
{
public event Notify ProcessCompleted;
public void StartProcess()
{
Console.WriteLine("프로세스 시작!");
// 작업 수행...
ProcessCompleted?.Invoke(); // 이벤트 발생
}
}
// 이벤트 핸들러 등록 및 사용
Process p = new Process();
p.ProcessCompleted += () => Console.WriteLine("프로세스 완료 알림!");
p.StartProcess();
이벤트 특징
- 이벤트는 외부에서 +=, -= 만 가능 (= 직접 할당 불가)
- 안전하게 다수의 메서드를 등록할 수 있음
- ?.Invoke()를 사용해 null 체크 후 호출
3. 델리게이트 vs 이벤트 비교
항목 델리게이트 이벤트
정의 목적 | 메서드 참조 | 알림 시스템 구현 |
직접 호출 | 가능 | 클래스 내부에서만 가능 |
외부 수정 가능성 | 높음 | 낮음 (+=만 허용) |
사용 예시 | 함수 넘기기, 콜백 | 버튼 클릭 알림, 완료 이벤트 |
이번 글에서는 C#의 핵심 고급 기능인 델리게이트와 이벤트를 정리했습니다.
- 델리게이트: 메서드를 변수처럼 참조하고 실행할 수 있다
- 이벤트: 객체 간 안전하게 알림을 전달하는 구조
728x90
반응형
'개발이야기' 카테고리의 다른 글
[C#] 비동기와 병렬 처리, 그리고 Task vs Thread 차이 완전 정리 (0) | 2025.04.17 |
---|---|
[C#] 비동기 프로그래밍 완벽 가이드 (0) | 2025.04.17 |
[C#] 예외 처리와 파일 입출력 완벽 가이드 (0) | 2025.04.17 |
[C#] 컬렉션과 LINQ 완전 정리 (0) | 2025.04.17 |
[C#] 상속과 인터페이스 (객체지향 고급 개념) (0) | 2025.04.17 |