MyCodeStory
[C#] delegate vs event 본문
반응형
🔹 C# 델리게이트와 이벤트의 차이점
C#에서 델리게이트(Delegate)와 이벤트(Event)는 유사한 개념이지만 각각의 역할과 사용 방식이 다릅니다. 이번 포스트에서는 두 개념의 차이점을 비교하고 예제를 통해 쉽게 이해해보겠습니다.
✅ 델리게이트 vs 이벤트 비교
구분 | 델리게이트(Delegate) | 이벤트(Event) |
---|---|---|
정의 | 메서드를 참조할 수 있는 타입 | 특정 동작이 발생했을 때 실행될 메서드를 지정하는 메커니즘 |
역할 | 메서드를 매개변수로 전달하거나, 실행 순서를 조정하는 역할 | 특정 이벤트가 발생했을 때 미리 등록된 메서드를 실행하는 역할 |
직접 호출 가능 여부 | ✅ 직접 호출 가능 (delegateInstance.Invoke() ) |
❌ 직접 호출 불가 (eventInstance.Invoke() 불가능) |
외부 접근 여부 | 외부 클래스에서 델리게이트 인스턴스를 직접 변경 가능 | 이벤트는 += 또는 -= 연산자로만 구독/해지 가능 (= 연산자로 직접 변경 불가) |
사용 목적 | 콜백 함수, 메서드 체인, 유연한 코드 실행 | UI 이벤트 처리, 사용자 상호작용 처리, 특정 동작을 감지하여 실행 |
사용 방법 | delegate 키워드 사용 |
event 키워드와 delegate 조합 |
🎯 델리게이트 예제 (Delegate Example)
using System;
namespace DelegateExample
{
// 델리게이트 선언
delegate void Notify(string message);
class Program
{
static void Main(string[] args)
{
Notify notifyDelegate = ShowMessage;
notifyDelegate("델리게이트 호출");
Console.ReadLine();
}
static void ShowMessage(string message)
{
Console.WriteLine(message);
}
}
}
📌 코드 설명
Notify 델리게이트를 선언하여 ShowMessage 메서드를 저장할 수 있도록 함.
notifyDelegate("델리게이트 호출");을 통해 델리게이트가 참조하는 메서드를 실행.
델리게이트는 메서드를 변수처럼 다룰 수 있으며, 직접 호출 가능
🎯 이벤트 예제 (Event Example)
using System;
namespace EventExample
{
class Publisher
{
// 이벤트 선언
public event Action<string> OnNotify;
public void RaiseEvent(string message)
{
OnNotify?.Invoke(message);
}
}
class Subscriber
{
static void Main(string[] args)
{
Publisher publisher = new Publisher();
publisher.OnNotify += ShowMessage; // 이벤트 핸들러 등록
publisher.RaiseEvent("이벤트 발생");
Console.ReadLine();
}
static void ShowMessage(string message)
{
Console.WriteLine(message);
}
}
}
📌 코드 설명
event 키워드를 사용하여 OnNotify 이벤트를 선언.
publisher.OnNotify += ShowMessage;를 통해 이벤트 핸들러를 추가.
publisher.RaiseEvent("이벤트 발생");를 호출하면 ShowMessage가 실행됨.
이벤트는 직접 호출할 수 없고, += 연산자로 핸들러를 추가해야 함.
🔥 델리게이트와 이벤트의 주요 차이점 정리
델리게이트는 직접 호출이 가능하지만, 이벤트는 직접 호출할 수 없음.
이벤트는 +=와 -= 연산자로만 핸들러 추가/삭제가 가능, 델리게이트는 =을 사용하여 직접 변경 가능.
델리게이트는 콜백 함수나 메서드 체인에 적합.
이벤트는 UI 프로그래밍 및 특정 동작 감지에 적합.
이벤트는 캡슐화를 강화하여, 외부에서 직접 실행을 막고 보안성을 높임.
반응형
'언어 > C# .NET' 카테고리의 다른 글
[C#] Delegate event (0) | 2025.04.03 |
---|---|
[C#] foreach 문 (0) | 2025.03.29 |
[C#] for문과 while문의 차이점 (0) | 2025.03.29 |
[C#] Type Conversion 형 변환 (0) | 2025.03.28 |
[C#] While 문 (0) | 2025.03.28 |