학습 일자 : 2023.04.20


Iterator(반복자)

자료구조에 저장되어 있는 요소를 순회하는 인터페이스

→ 어떠한 자료구조가 들어가든 처음부터 끝까지 순회하며 다음으로 넘어가는 행동을 “반복”함.

C#에서 지원하는 자료구조(List, LinkedList, Stack, Queue…등)는 대부분 반복기를 지원함. (반복기를 이용한 기능을 구현할 경우, 그 기능은 대부분의 자료구조를 호환할 수 있음)

반복기가 자료구조에서 중요한 인터페이스임

반복기를 이용한 순회 = foreach

반복기가 돌고 있는 중에 값이 추가 되면?

→ 배열 구조가 바뀌면서 원래 잡았던 것 보다 커지게 되면 새로운 곳으로 옮겨가.. 근데 반복기는 같이 안 옮겨가기 때문에 반복기 혼자 이상한 곳을 가리키게 됨 = 오류남

그래서 버전 카운트를 가리키고 있음. 배열의 데이터를 삭제하거나 추가하거나, 재할당되면 
전 카운트가 올라감. 그래서 오류 남. 터지는 걸 방지하는 것이지!

반복기 구현 1

[01.List]에서 리스트 공부하면서 만든 List클래스에 반복기 추가

[변수]

private int index; //현재 가리키고 있는 인덱스
private List<T> list; //현재 가지고 있는 리스트
public T Current { get { return list[index]; } }

[ Reset ]

처음으로 이동 (현재 위치를 나타내는 index를 0으로 바꿔줌)

public void Reset() { index = 0; }

[ MoveNext ]

다음으로 이동