본문 바로가기

Develop/.NET 가이드

[C#] Delegates 대리자와 Events 이벤트 중 선택하기

반응형

Delegates & Events
Delegates & Events

Delegates 대리자와 Events 이벤트 중 선택하기

C# 의 언어 기능 중 Delegates 대리자와 Events 이벤트는 매우 유사합니다. 심지어 이벤트는 대리자 기능에 기반을 두고 있죠. 대리자와 이벤트 둘 다 런타임에 구현 코드가 바인딩되는 시나리오로 구성되어 있습니다. 또 두 기능 모두 Invoke() 메서드로 호출됩니다. 이러한 유사성으로 인해 언제 대리자를 또는 이벤트를 사용할지 결정하기가 어려울 수 있습니다.

대리자와 이벤트 중 어떤 언어 기능을 사용할지 결정할 때 가장 중요하게 고려해야 할 사항은 구독자가 있어야 하는지의 여부입니다. 대리자의 경우 구독자가 없다면 메서드를 호출하는 의미가 없으므로, 구독자가 필수적으로 필요합니다. 만약 대리자를 메서드의 매개 변수로 넘겨주는데, 대리자에 연결된 함수가 전혀 없다면 오류가 발생하게 됩니다. 반면, 이벤트는 구독자가 없더라도 문제가 되지 않습니다.

또 다른 고려 사항으로는 반환 값의 형식 입니다. 이벤트는 모두 void 를 반환하는 반면, 대리자는 개발자가 어떠한 값을 반환할 것인지 유연하게 결정할 수 있습니다.

대리자와 이벤트를 초기 개발 단계부터 고려하여, 처음부터 코드 디자인에 반영하는 경우는 드뭅니다. 대부분 사용하는 프레임워크 특히 .NET 라이브러리 설계에 따라 언어의 기능을 사용하게 됩니다. 그럼에도 불구하고 대리자와 이벤트를 구분할 줄 아는 지식은 C# 언어에 대한 이해를 깊게 하고, 언어 설계의 목적에 맞게 코드를 작성할 수 있도록 합니다. 특히 프레임워크를 이해하는데 도움이 됩니다.

반응형