Enumerator(열거자)
데이터 요소를 하나 씩 리턴하는 기능.
C#에서 IEnumerator 인터페이스를 이용해서 구현할 수 있다.
⑴ 모든 컬렉션은 IEnumerable<T> 인터페이스를 구현한다.
- 열거자를 꺼내는 GetEnumerator() 라는 메서드를 제공한다.
② 열거자
- 컬렉션의 요소를 가리키는 객체
- MoveNext(), Current, Reset() 맴버로 모든 요소 접근 가능
- 모든 열거자는 사용법이 동일하다.
- 모든 열거자는 IEnumerator<T> 인터페이스를 구현하고 있다.
속성
Current : 열거자의 현재 위치에 있는 컬렉션의 요소를 가져온다.
MoveNext : 열거자를 컬렉션의 다음 요소로 진행한다.
Reset : 열거자를 컬렉션의 첫번 째 요소 앞에 있는 초기 위치로 설정한다.

foreach
foreach 실행 조건
- 루프 대상이 GetEnumerator() 메소드를 가지고 있어야 한다.
- GetEnumerator() 반환타입이 MoveNext() 메소드와 Current 프로퍼티를 가지고 있어야 한다.
foreach문을 사용하면 내부적으로 열거자를 사용하는 코드로 바뀌게 된다.
yield
C#에서 yield가 사용되는 곳은 집합적 데이터를 갖고 있는 컬렉션 클래스이다. 컬렉션 클래스는 데이터 요소를 하나 씩 사용하기 위해 enumerator(Iterator)를 구현하는데
이때 yield를 사용한다.
C# 컴파일러는 yield 문이 사용된 메소드를 컴파일 단계에서 IEnumerable / IEnumerator 코드로 치환해서 내부적으로 구현한다.
yield 속성
- yield return : 컬렉션 데이터를 하나 씩 리턴하는데 사용한다.
- yield break : 리턴을 중지하고 iteration 루프를 빠져나올 때 사용한다.