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/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
31.1: ref 키워드를 사용해 매개변수를 참조로 전달하기 (pass by reference) (0) | 2021.10.19 |
---|---|
30.2: IEnumerable<int> (0) | 2021.10.18 |
30: IEnumerable (0) | 2021.09.30 |
29.2: 간단한 숫자 기반 반복기 (iterator) 예제 (0) | 2021.09.24 |
29.1: yield 문을 이용하여 반복기 (iterator) 생성하기 (0) | 2021.09.23 |