티스토리 뷰

이터레이터(Iterator)

영어로 iterate는 반복을 의미한다. 즉, 프로그램안에서도 이터레이터는 반복하기 위한 것을 의미한다.

 

C#(.NET Framework)에서 이터레이터는 열거자로 부르며 IEnumerator 인터페이스를 통해 나타낸다.

이터레이터를 사용하여 yield 키워드를 사용해 배열 또는 컬렉션 클래스에 대해 요소를 열거할 수 있다.

간단하게 말해 foreach 구문으로 처리할 수 있는 것과 같다.

 

yield? 

호출자(Caller)에게 컬렉션 데이터를 하나씩 리턴할 때 사용

 

yield 종류 2개

- yield return : 컬렉션 데이터를 하나씩 리턴할 때 사용
- yield break : 리턴을 중지하고 Iteration 루프를 빠져나올 때 사용

 

foreach문은 이용자 측에서는 편하지만 IEnumerable이나 IEnumerator 인터페이스의 구현이 필요해서 조금 번거로울 때가 있다.

이런 경우 이터레이터를 사용하면 이 인터페이스의 구현이 쉬워지고 요소를 열거할 수 있다.

 


・이터레이터 (C#)

이터레이터는 C# 2.0 부터 사용할 수 있다.

메소드나 속성(get) 블록 내에서 return 대신 yield를 사용해 열거되는 값을 반환한다.

 

무슨 말이지..? 싶을테지만, foreach구문과 yield return을 사용한 예제를 보면 이해하기 쉬울거임..!

using System;
using System.Collections.Generic;
namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1-10까지 열거
            foreach (var item in GetList(10))
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

        // 1부터 인수까지의 값을 반환하는 이터레이터
        static public IEnumerable<int> GetList(int end)
        {
            for (int i = 1; i <= end; i++)
            {
                yield return i;
            }
        }
    }
}

 

이터레이터 (VB.NET)

VB.NET에서는 Iterator 키워드를 Function앞에 붙이고

Yield 스테이트먼트를 사용해 값을 반환한다.

Sub Main()
    For Each n In MyIterator()
        Console.WriteLine(n)
    Next
    Console.Read()
End Sub

' 1부터 10까지 이터레이터
Private Iterator Function MyIterator() As IEnumerable(Of Integer)
    For n = 1 To 10
        Yield n
    Next
End Function

이런식으로 이터레이터를 사용하면 반복처리를 할 때 쉽게 구현할 수 있을 것임..!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함