Notice
Link
반응형
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
관리 메뉴

MyCodeStory

[C#] delegate vs event 본문

언어/C# .NET

[C#] delegate vs event

Code0Kim 2025. 4. 3. 00:20
반응형

🔹 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