IEnumerable 컬렉션

namespace System.Collections{ public interface IEnumerable IEnumerator GetEnumerator(); }

GetEnumerator()라는 하나의 메서드를 포함, foreach 구문 등에서 개체를 하나씩 넘겨주는 역할을 한다.

이 메서드는 System.Collections.IEnumerator 인터페이스를 구현하는 Enumerator 개체를 돌려준다.

Enumerator 개체는 컬렉션의 요소들을 살펴보기 위해 사용된다.

Enumerator는 목록의 요소들을 가리키는 포인터라고 생각하자. 처음 포인터는 첫 번째 항목의 <앞부분>을 가리킨다.

(Enumerator가 가지는 state의 초깃값은 -1) MoveNext 메서드를 호출하면 현재 위치의 다음인 첫 번째 항목으로 이동한다.

메서드 호출 후 가리키는 항목이 존재하면 true를 반환하고 그렇지 않은 경우엔 false를 반환한다.

Current 속성은 현재 가리키는 항목에 접근할 때 사용하며, Reset 메서드는 목록에서 포인터가 첫 번째 항목의 앞부분을 재 지시하도록 설정해준다.

컬렉션의 GetEnumerator 메서드를 사용하여 Enumerator를 생성하고 MoveNext 메서드를 통해 반복 호출하여 

Enumerator 의 Current 속성 값을 읽어들이면 한 번에 하나씩 다음 컬렉션의 구성 요소들로 이동할 수 있다.

(이것은 foreach 구문과 기능적으로 동일하다.)

직접 나열 가능한 컬렉션 클래스를 새로 만들고자 한다면 컬렉션 클래스에서 IEnumerable 인터페이스와 IEnumerator 인터페이스를 함께 구현해야 한다.


foreach 문과 유사한 IEnumerator 기본 동작 예제


'Programming > C++, C#' 카테고리의 다른 글

[C#] Lambda Expression  (0) 2018.06.07
[C#] Generic  (0) 2018.06.06
[C#] Interface  (0) 2018.06.06
[C#] Delegate , Event  (0) 2018.06.06
[C#] Out vs Ref  (0) 2018.06.06

+ Recent posts