[c#] C# 이터레이터와 이벤트 처리

C#은 강력한 기능을 가진 다양한 기능을 제공하여 사용자가 효율적으로 작업을 수행할 수 있도록 지원합니다. 이번 글에서는 C#에서 이터레이터(iterator)와 이벤트(event) 처리에 대해 알아보겠습니다.

이터레이터(iterator)란?

이터레이터는 연속적인 데이터 집합을 반복하거나 순회(iterate)하기 위한 기능을 제공합니다. C#에서는 yield 키워드를 사용하여 간단하게 이터레이터를 작성할 수 있습니다.

다음은 간단한 예제 코드입니다.

using System;
using System.Collections;
using System.Collections.Generic;

public class MyCollection : IEnumerable<int>
{
    private List<int> data = new List<int>();

    public void Add(int item)
    {
        data.Add(item);
    }

    public IEnumerator<int> GetEnumerator()
    {
        foreach (int item in data)
        {
            yield return item;
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

class Program
{
    static void Main()
    {
        MyCollection collection = new MyCollection();
        collection.Add(1);
        collection.Add(2);
        collection.Add(3);

        foreach (int item in collection)
        {
            Console.WriteLine(item);
        }
    }
}

MyCollection 클래스는 IEnumerable<int> 인터페이스를 구현하고, GetEnumerator 메서드를 이용하여 각 요소를 순회할 수 있는 이터레이터를 제공합니다.

이벤트(event) 처리

C#에서 이벤트는 미리 정의된 행동(예: 버튼 클릭, 마우스 움직임 등)이 발생했을 때 처리하는 데 사용됩니다. 이벤트 처리를 위해 사용자 지정 이벤트를 정의하고, 그 이벤트를 발생시키는 방법을 제공합니다.

다음은 간단한 예제 코드입니다.

using System;

public class EventPublisher
{
    public event EventHandler CustomEvent;

    public void DoSomething()
    {
        // 작업 수행 후 이벤트 발생
        OnCustomEvent();
    }

    protected virtual void OnCustomEvent()
    {
        CustomEvent?.Invoke(this, EventArgs.Empty);
    }
}

public class EventSubscriber
{
    public EventSubscriber(EventPublisher publisher)
    {
        publisher.CustomEvent += Publisher_CustomEvent;
    }

    private void Publisher_CustomEvent(object sender, EventArgs e)
    {
        Console.WriteLine("Custom event occurred");
    }
}

class Program
{
    static void Main()
    {
        EventPublisher publisher = new EventPublisher();
        EventSubscriber subscriber = new EventSubscriber(publisher);
        
        publisher.DoSomething();
    }
}

EventPublisher 클래스는 CustomEvent라는 사용자 정의 이벤트를 정의하고, DoSomething 메서드를 통해 이벤트를 발생시킵니다. EventSubscriber 클래스는 이벤트를 구독하고, 발생시에 콜백 메서드가 실행됩니다.

C#의 이터레이터와 이벤트 처리를 효과적으로 활용하여 코드를 구조화하고, 응용 프로그램의 성능을 향상시킬 수 있습니다.

참고: