Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 이벤트(Event)와 대리자(Delegate)의 차이점 완벽 정리

C#에서 이벤트(Event)는 대리자(Delegate)가 가진 문제점을 해결하기 위해 도입된 기능입니다. 대리자는 외부에서 쉽게 재정의(override)할 수 있어 코드에 오류가 발생할 위험이 있습니다. 이러한 문제를 방지하기 위해 C#은 이벤트를 사용하며, 이벤트는 대리자를 감싸는 래퍼(wrapper) 역할을 수행합니다.

C#에서의 이벤트(Event)

이벤트를 사용하려면 먼저 대리자를 정의해야 합니다. 이벤트는 일종의 대리자 타입이며, 대표적인 예로 키보드의 키가 눌렸을 때 발생하는 상황을 들 수 있습니다.

public delegate void Demo(string val);     
public event Demo TestEvent;   

이벤트에 대리자 연결하기

정의된 이벤트에는 다음과 같이 대리자 인스턴스를 등록할 수 있습니다. += 연산자를 사용하여 메서드를 이벤트에 구독(subscribe)하는 방식입니다.

this.TestEvent += new Demo(DemoData);

C#에서의 대리자(Delegate)

대리자는 메서드에 대한 참조(reference)를 저장하는 참조 형식 변수입니다. 대리자가 가리키는 참조는 런타임 시점에 변경할 수 있다는 점이 특징입니다.

public delegate void Demo(string val);     

이벤트와 대리자의 핵심 차이

정리하면, 대리자는 메서드를 참조할 수 있는 유연한 타입이지만 외부에서 자유롭게 호출하거나 재정의될 수 있습니다. 반면 이벤트는 대리자를 캡슐화하여 클래스 외부에서 직접 호출하거나 할당(=)하는 것을 막고, 오직 +=-= 연산으로 구독과 구독 해제만 허용합니다. 이 덕분에 이벤트는 더 안전하고 견고한 이벤트 기반 프로그래밍 모델을 제공합니다.