본문 바로가기

워크/C# 2.0

반복자 (Iterators)

반복자는 C#에서 컬렉션을 순회하기 위한 간결하고 깔끔한 방법을 제공합니다. 반복자는 yield return 및 yield break 키워드를 사용하여 정의되며, 이를 통해 foreach 문에서 사용할 수 있는 IEnumerable 또는 IEnumerator를 간단하게 구현할 수 있습니다.

아래는 간단한 반복자 예제입니다:

using System;
using System.Collections.Generic;

public class IteratorExample
{
    public static IEnumerable<int> GetNumbersUpToTen()
    {
        for (int i = 1; i <= 10; i++)
        {
            yield return i; // 현재 숫자를 반환하고 다음 호출 때 이 지점부터 계속
        }
    }

    public static IEnumerable<int> GetEvenNumbers(IEnumerable<int> numbers)
    {
        foreach (var num in numbers)
        {
            if (num % 2 == 0)
            {
                yield return num; // 짝수만 반환
            }
        }
    }

    public static void Main()
    {
        Console.WriteLine("All numbers up to ten:");
        foreach (int number in GetNumbersUpToTen())
        {
            Console.WriteLine(number);
        }

        Console.WriteLine("\nEven numbers:");
        foreach (int evenNumber in GetEvenNumbers(GetNumbersUpToTen()))
        {
            Console.WriteLine(evenNumber);
        }
    }
}

이 코드를 실행하면 다음과 같은 출력 결과를 볼 수 있습니다:

All numbers up to ten:
1
2
3
4
5
6
7
8
9
10

Even numbers:
2
4
6
8
10

이 예제에서, GetNumbersUpToTen 메서드는 1부터 10까지의 숫자를 반환하는 반복자입니다. GetEvenNumbers 메서드는 주어진 숫자 중에서 짝수만을 반환하는 반복자입니다.

yield return은 현재 값을 반환하고, 다음 호출 때 정확히 그 위치부터 실행을 계속합니다. 이를 통해 반복자는 간단하고 효율적인 방식으로 컬렉션을 순회하게 됩니다.

 

'워크 > C# 2.0' 카테고리의 다른 글

Covariance와 Contravariance  (0) 2023.08.25
고정 크기 버퍼 (Fixed Size Buffers)  (0) 2023.08.25
익명 메서드 (Anonymous Methods)  (0) 2023.08.25
Nullable 타입  (0) 2023.08.25
제네릭 (Generics)  (0) 2023.08.25