티스토리 뷰

[.Net C#]/기초

[C#] Yield와 Enumerator

삼손스 2019. 7. 28. 13:38

C#에서 yield가 자주 사용되는 곳은 집합적 데이터를 가지고 있는 컬렉션 클래스이며,

일반적으로 컬렉션 클래스는 데이터 요소를 하나 하나 사용하기 위해 흔히 Enumerator(Iterator)를 구현하는 경우가 많습니다 Enumrator를 구현하는 한 방법으로 yield를 사용할 수 있습니다.

 

Enumerator는 데이터 요소를 하나씩 리턴하는 기능을 하는 것으로 C#.net에서는 IEnumerator라는 인터페이스를 구현해야 합니다 인터페이스는 Current(속성), MoveNext() (메서드), Reset() (메서드) 등 3개의 멤버로 이루어져 있는데, Enumerator가 되기 위해서 Current와 MoveNext()를 반드시 구현해야 합니다. 

 

 

public class MyList
{
    private int[] data = { 1, 2, 3, 4, 5 };
    
    public IEnumerator GetEnumerator()
    {
        int i = 0;
        while (i < data.Length)
        {
            yield return data[i];
            i++;                
        }
    }

    //...
}

// (1) foreach 사용하여 Iteration
var list = new MyList();

foreach (var item in list)  
{
    Console.WriteLine(item);
}

// (2) 수동 Iteration
IEnumerator it = list.GetEnumerator();
it.MoveNext();
Console.WriteLine(it.Current);  // 1
it.MoveNext();
Console.WriteLine(it.Current);  // 2

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크