언어/C#

[C#] 이벤트(event)란?

돌멩이수프 2022. 5. 27. 18:46
728x90

이벤트 클래스는 클래스 안에서 특정한 일이 발생했을 때 구독자들에게 그 일을 알리는 메커니즘이다.

 

using System;

namespace ServerStudy
{
    class Publisher
    {
        public delegate void OnInputKey(); // OnInputKey라는 이름의 이벤트 핸들러 델리게이트 선언
        public event OnInputKey InputKey; // InputKey라는 이름의 이벤트 선언

        public void Update()
        {
            if (Console.KeyAvailable == false)
                return;

            ConsoleKeyInfo info = Console.ReadKey();
            if (info.Key == ConsoleKey.Enter)
                InputKey();
        }
    }
}

 

이벤트를 발생하는 클래스다. 이벤트 핸들러는 말 그대로 이벤트를 관리하는 델리게이트다. Publisher라는 이름을 달아준 그대로 클래스의 Update 함수에서는 사용자가 엔터키를 누르는지 안 누르는지 확인한 후 사용자가 엔터키를 입력하는 순간 InputKey()라는 이벤트를 발생시킨다.

 

using System;

namespace ServerStudy
{
    class Subscriber
    {
        static void OnInputTest()
        {
            Console.WriteLine("Enter!");
        }

        static void Main(string[] args)
        {
            Publisher _publisher = new Publisher();
            _publisher.InputKey += OnInputTest; // InputKey가 활성화되면 OnInputTest 함수가 호출됨.

            while (true)
                _publisher.Update();
        }
    }
}

 

사용자가 엔터키를 눌러 InputKey() 이벤트가 발생하면 Subscriber 클래스에서 엮어놓은 OnInputTest 함수가 호출된다.

 

 

OnInputTest 속 Enter!가 성공적으로 출력되는 모습을 확인할 수 있다.

728x90