상세 컨텐츠

본문 제목

[C#] 이벤트(Event)

.NET/C#

by 클리엘 클리엘 2021. 4. 12. 14:59

본문

728x90

객체에서 특정 사건이 발생하면 이를 알려주도록 처리하는 것이 이벤트(Event)입니다. 사건은 버튼이 클릭되는 등의 사용자 동작부터 어떤 변수가 특정값이 될 때와 같은 변화까지 다양하게 적용될 수 있습니다.

 

참고로 이벤트는 대리자를 event한정자로 수식해 구현합니다. 따라서 대리자에 관해서 미리 알아둘 필요가 있습니다.

 

[.NET/C#] - [C#] 대리자(Delegate)

 

이벤트를 구현하는 절차는 다음과 같습니다. 우선 이벤트가 발생했을 때 동작을 처리할 메서드와 동일한 형식의 대리자를 선언합니다.

delegate void EventHandler(string EventMessage);

실제 이벤트를 처리할 클래스를 작성합니다. 위에서 선언한 Delegate의 인스턴스를 event로 수식하고 메서드 안에서 특정 조건이 되면 이벤트를 호출하도록 하였습니다.

class MyClass
{
	public event EventHandler eventCallMethod;

	public void MyMethod(int i)
	{
		if (i == 10) {
			eventCallMethod("처리 끝");
		}
	}
}

해당 MyClass를 사용할 클래스에서는 대리자의 형식과 일치하는 메서드를 작성하는데 예제에서 HelloWorld안에 있는 MyEventHandler메서드가 그것이며 이 메서드는 대리자에 메서드를 등록하는 것과 같은 방식인 +=연산자를 통해 MyClass의 eventCallMethod와 연결합니다.

 

이런 방식으로 이벤트를 연결하는 이유는 MyClass안에서 public로 Event가 선언되어 있어도 외부에서 직접 호출하는 것은 불가능하기 때문입니다. 따라서 별도의 메서드를 만들어 이벤트와 연결해야 하는데 이 부분이 기존의 대리자와 가장 구분되는 점이기도 합니다.

 

결국 MyClass에 있는 eventCallMethod이 호출되면 이와 연결된 MyEventHandler가 호출됨으로서 이벤트가 발생하는 것입니다.

class HelloWorld
{
	static void Main(string[] args)
	{
		MyClass myClass = new MyClass();
		myClass.eventCallMethod += new EventHandler(MyEventHandler);

		for(int i = 0; i <= 10; i++)
			myClass.MyMethod(i);
	}

	static public void MyEventHandler(string EventMessage)
	{
		Console.WriteLine(EventMessage);
	}
}

 

728x90

'.NET > C#' 카테고리의 다른 글

[C#] 리플렉션  (0) 2021.04.19
[C#] 대리자(Delegate)  (0) 2021.04.15
[C#] 이벤트(Event)  (0) 2021.04.12
[C#] 람다식  (0) 2021.04.06
[C#] 예외처리  (0) 2021.02.25
[C#] 일반화  (0) 2021.02.11

태그

관련글 더보기

댓글 영역