Section 30.1: 사용자 구현 Enumerator 와 IEnumerable

IEnumerable 인터페이스를 구현 (implement) 하게 되면, 사용자의 클래스는 BCL 컬렉션들과 마찬가지의 방식으로 열거 (enumerate) 기능을 사용할 수 있게 된다. 이를 위해서는 열거 상태를 추적하는 상속된 Enumerator 클래스를 작성할 필요가 있다.

표준 컬렉션 이외의 대상을 요소 반복 (iterate) 할 필요가 있는 예제로는 다음과 같은 경우가 있을 수 있다:

  • 객체들의 컬렉션이 아닌, 함수로부터 생성되는 일정 범위의 숫자들을 요소 반복하고자 하는 경우
  • 컬렉션을 다른 방식으로 요소 반복하고자 하는 경우, 예를 들어 그래프를 나타내는 컬렉션에 대해 DFS 및 BFS 방식으로 탐색을 수행하는 경우
public static void Main(string[] args) { foreach(var coffee in new CoffeeCollection()) { Console.WriteLine(coffee); } } public class CoffeeCollection: IEnumerable { private CoffeeEnumerator enumerator; public CoffeeCollection() { enumerator = new CoffeeEnumerator(); } public IEnumerator GetEnumerator() { return enumerator; } public class CoffeeEnumerator: IEnumerator { string[] beverages = new string[3] { "espresso", "macchiato", "latte" }; int currentIndex = -1; public object Current { get { return beverages[currentIndex]; } } public bool MoveNext() { currentIndex++; if (currentIndex < beverages.Length) { return true; } return false; } public void Reset() { currentIndex = 0; } } }
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts