CSharp 델리게이트와 이벤트

양승준·2025년 4월 22일

CSharp

목록 보기
18/20
post-thumbnail

시작하며

이번에는 델리게이트와 이벤트 정리다~

C# Delegate와 Event 정리


Delegate (델리게이트)

정의

  • 메서드를 참조할 수 있는 타입 안전한 함수 포인터
  • 메서드의 시그니처(반환형 + 매개변수)가 동일하면 참조 가능

선언 & 사용 예제

// 델리게이트 선언
public delegate void MyDelegate(string message);

// 메서드 정의
public void ShowMessage(string msg)
{
    Console.WriteLine("메시지: " + msg);
}

// 델리게이트 인스턴스 생성 및 호출
MyDelegate d = new MyDelegate(ShowMessage);
d("안녕하세요!");  // 출력: 메시지: 안녕하세요!

특징

  • 멀티캐스트 지원 (메서드 체이닝)
  • +=, -= 연산자로 메서드 추가/제거 가능

Event (이벤트)

정의

  • 델리게이트를 캡슐화한 멤버
  • 클래스 외부에서 직접 호출 불가, 오직 구독/해제만 가능
  • 이벤트 기반 프로그래밍에 필수

선언 & 사용 예제

// 델리게이트 정의
public delegate void Notify();

// 이벤트 정의
public class Process
{
    public event Notify OnCompleted;

    public void Start()
    {
        Console.WriteLine("작업 중...");
        Thread.Sleep(1000);
        Console.WriteLine("작업 완료!");

        // 이벤트 발생
        OnCompleted?.Invoke();
    }
}

// 이벤트 구독 예제
Process p = new Process();
p.OnCompleted += () => Console.WriteLine("콜백: 작업이 끝났습니다.");
p.Start();

특징

  • event 키워드는 접근 제한을 위해 사용
  • 외부에서 Invoke 불가 (내부에서만 호출 가능)
  • 외부에서는 +=, -= 으로 구독 관리

Delegate vs Event 요약

항목DelegateEvent
타입참조형 (함수 포인터 역할)Delegate를 감싼 멤버
직접 호출가능외부에서 호출 불가 (Invoke ❌)
구독 방식가능 (+=, -=)가능 (+=, -=)
사용 목적콜백, 체이닝알림, 반응 (Observer 패턴)
profile
지모창말, 미모창.

0개의 댓글