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
반응형

+ Recent posts