티스토리 뷰

 

 

IEnumerable와 IEnumerator :

C++의 Iterator와 같은 반복자에 대해서 C#에서 제공하는 인터페이스 세트

 

 

 

<이미지 출처 : https://www.c-sharpcorner.com/article/ienumerable-iqueryable-ienumerator-in-c-sharp/Images/IEnumerable%20Iqueryable%20IEnumerator.png>

 

 

 

IEnumerable : 

IEnumerator GetEnumerator() 함수를 구현하도록 요구하는 인터페이스

 

interface IEnumerable
{
    IEnumerator GetEnumerator();
}

 

IEnumerable 인터페이스에는 foreach 구문에서 필요한 멤버들을 약속한 IEnumerator 형식의 객체를 반환하는 GetEnumerator() 함수를 제공하고 있다.

 

 

 

IEnumerator :

foreach 구문 사용을 위해 필수적으로 구현해야 하는 인터페이스

 

interface IEnumerator
{
    bool MoveNext();
    void Reset();
    Object Current { get; }
}

 

IEnumerator 인터페이스는 foreach 구문에 필요한 3가지 멤버들로 구성되어 있다.

 

MoveNext() 열거자를 컬렉션의 다음 요소로 이동
Reset() 컬렉션의 첫번째 위치에 있는 요소 앞에 열거자를 설정
Current 컬렉션의 현재 요소 반환

 

 

 

따라서 위 인터페이스에 따르는 형식의 클래스라면 foreach문을 사용하여 반복자를 구현할 수 있다.

 

또한 yield 키워드를 사용하여 IEnumerable나 IEnumerator 형으로 값을 변환시켜 반환하거나 중지시킨다.

 

 

yield : 

호출자에게 컬렉션 데이터를 하나씩 리턴할 수 있도록 하는 키워드

 

yield return 컬렉션 요소를 하나씩 리턴
yield break 리턴을 중지하여 반복문에서 벗어남

 

호출자가 yield return 구문이 있는 메서드를 실행하면 yield return 까지만 실행하여 하나의 요소를 리턴한 뒤 다음에 다시 실행될 때 다음 부분부터 실행된다.

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함