C#/C#정리
[C#] Event - Delegate를 사용한 이벤트 처리
반나무
2021. 8. 31. 20:41
🌳 Event
- 델리게이트를 이용한 콜백을 좀 더 기능적으로 만들어주는 키워드다.
- 이벤트에서는 델리게이트 콜백에서 델리게이트 변수를 넘겨주었던 과정까지 생략할 수 있다.
- 이벤트를 이해하려면 이벤트를 발생시키는 쪽과 발생한 이벤트에 반응하는 쪽을 나눠 생각할 수 있어야한다.
- 이벤트를 발생시키는 클래스 : Publisher
- 이벤트를 반응하는 클래스 : Subscriber
🌳 Event 사용이유
자식에서 부모의 메소드를 사용하는것은 매우 어려운 작업이다 아주 가부장적인 C#이다
그래서 이벤트를 통해 어디선가 작업된 내용을 쏘고 이벤트 구독을 통해 받는다.
이벤트는 구독자가 아주 많을 때 굉장히 유용하다.
이벤트 발생 후 구독자의 메서드를 일일이 호출해야 하는 것이 아니라, 각각의 구독자는
이 이벤트가 발생하는지 듣고 있다가 이벤트가 발생했을 때 자신이 등록해 놓은 메서드를 실행하기 때문이다.
🌳 Event 선언 순서
- 이벤트를 발생시키기 위한 이벤트 핸들러 델리게이트 선언
- 게시자 클래스 선언
- 이벤트 선언(참고로 이벤트 선언은 값을 전달하는 쪽에서 선언)
- 이벤트 게시자가 있는지 유무 체크
- 구독자 클래스 선언
- 이벤트 사용
🌳 기본 예시
public class EventExample
{
// 4. 이벤트를 사용하는 예제
void Main()
{
Subscriber sub = new Subscriber();
Publisher pub = new Publisher();
// Publisher가 이벤트를 실행하면
// 이벤트를 구독하고 있던 Subscriber의 메서드가 호출되는것을 확인할 수 있다.
pub.RunEvent();
}
}
// 1. Publisher 클래스 정의
delegate void myEventHandler();
class Publisher
{
// static으로 생성해 Publisher의 객체와 무관한 이벤트로 만든다.
public static event myEventHandler myEvent;
// 2. 이벤트를 호출하는 메서드 생성
public void RunEvent()
{
// 이 이벤트를 구독하는 클래스가 아무도없다면
// myEvent를 호출할 때 NullReferenceException이 발생하므로
// 이를 방지하기위해 if문으로 널 확인
if(myEvent != null)
{
myEvent();
}
}
}
// 3. 이벤트를 구독하는 Subscriber 클래스 정의
class Subscriber
{
public Subscriber()
{
Publisher.myEvent += DoSomething;
}
public void DoSomething()
{
Debug.Log("이벤트 발생!");
}
}
예시 : 비트맵 → 비트맵이미지 → 바인딩
- 이벤트 핸들러 델리게이트 선언 + 3. 이벤트 선언
// 이벤트를 발생 시키기 위한 이벤트 핸들러 델리게이트 선언
public delegate void ImageCreated(BitmapImage bitmapImg);
// 이벤트 선언 ( 값을 전달 하는 쪽 )
public static event ImageCreated ImageCreatedEvent;
2. 게시자 클래스 선언 + 4. 이벤트 게시자가 있는지 유무 체크
// 비트맵을 받아서 비트맵 이미지로 변환 후 출력까지
public void PrintImage(Bitmap bitmap)
{
// 이벤트 게시자가 있는지 유무 체크
if (ImageCreatedEvent != null)
{
ImageCreatedEvent(bitmap2BitmapImage(bitmap));
} else
{
throw new Exception(String.Format("이미지 출력 실패"));
}
}
3. 구독자 클래스 선언 + 6. 이벤트 사용
public MainViewModel()
{
CameraController.ImageCreatedEvent += PrintImage;
}
private void PrintImage(BitmapImage bitmapImg)
{
MainImage = bitmapImg;
}
[C#] C# 문법 이벤트(Event) 선언 및 사용 방법
이번 포스팅에서는 C# 문법 중 하나인 이벤트 선언하는 방법에 대해서 알아보도록 하겠습니다. 실무에서 프로젝트를 많이 하시다 보면 이벤트를 사용을 안 할래야 안 할 수가 없는 문법인데요.
afsdzvcx123.tistory.com
C# 이벤트 - C# 프로그래밍 배우기 (Learn C# Programming)
C# 이벤트 이벤트는 클래스내에 특정한 일(event)이 있어났음을 외부의 이벤트 가입자(subscriber)들에게 알려주는 기능을 한다. C#에서 이벤트는 event라는 키워드를 사용하여 표시하며, 클래스 내에
www.csharpstudy.com
도움이 되었다면 좋아요 꾹!
반응형