C#

[TIL] C#의 반복자 인터페이스

unihee1 2025. 3. 10. 21:28

컬렉션(리스트, 배열 등)을 순차적으로 탐색할 수 있는 객체를 의미한다.

1. IEnumerator 인터페이스

  • 컬렉션의 요소를 하나씩 순회할 수 있도록 하는 인터페이스이다.
  • 현재 위치를 유지하며 MoveNext()를 호출하여 다음 요소로 이동이다.
멤버 설명
MoveNext() 다음 요소로 이동(없으면 false 반환)
Current 현재 요소 반환
Reset() 처음 위치로 이동 (잘 사용되지 않음)

 

2. IEnumerable 인터페이스

  • IEnumerator를 반환하는 인터페이스이다.
  • foreach 문에서 사용 가능하도록 지원이다.
멤버 설명
GetEnumerator() IEnumerator 객체를 반환

 

3. yield return을 이용한 반복자 구현

  • IEnumerator를 직접 구현하는 대신 간단하게 반복자를 생성하는 키워드이다.
  • yield return을 사용하면 상태를 자동으로 저장하고 다음 호출 시 이어서 실행이다.

 

4. IEnumerator<T> & IEnumerable<T> (제네릭 버전)

  • IEnumerator<T>와 IEnumerable<T>는 특정 타입을 반환하도록 설계된 제네릭(Generic) 버전이다.
  • 일반 IEnumerator/IEnumerable보다 타입 안정성이 뛰어나며 박싱/언박싱이 발생하지 않는다.

 

5. Unity에서의 IEnumerator 인터페이스

코루틴(Coroutine) 을 구현하는 데 사용되며 비동기적으로 실행되는 작업을 쉽게 만들 수 있다.

 

- Unity에서 IEnumerator가 사용되는 이유

Unity는 게임 루프가 프레임 단위로 실행되므로 일반적인 void 함수는 한 프레임 내에서 즉시 실행되고 끝난다.

하지만 특정 시간 동안 기다리거나 여러 프레임에 걸쳐 실행되는 동작을 구현하려면 IEnumerator 코루틴을 사용해야 한다.

 

- Unity에서 IEnumerator를 사용하는 코루틴의 특징

  • IEnumerator를 반환하는 함수는 코루틴으로 실행해야 한다.
  • yield return 키워드를 사용하여 일정 시간 대기 가능하다.
  • StartCoroutine()으로 실행하고 StopCoroutine()으로 중지 가능하다.

- IEnumerator에서 다양한 yield return 사용법

yield return 유형 설명
yield return null 한 프레임 기다림
yield return new WaitForSeconds(2f) 2초 동안 기다림
yield return new WaitForEndOfFrame() 프레임 끝날 때까지 기다림
yield return new WaitForFixedUpdate() 다음 FixedUpdate까지 기다림
yield return StartCoroutine(다른코루틴()) 다른 코루틴이 끝날 때까지 기다림

 

6. 정리

인터페이스 역할
IEnumerator 컬렉션 요소를 순차적으로 탐색하는 인터페이스
IEnumerable IEnumerator를 반환하는 인터페이스 (컬렉션 지원)
IEnumerator<T> 특정 타입을 반환하는 제네릭 반복자
IEnumerable<T> IEnumerator<T>를 반환하는 제네릭 컬렉션