컬렉션(리스트, 배열 등)을 순차적으로 탐색할 수 있는 객체를 의미한다.
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>를 반환하는 제네릭 컬렉션 |
'C#' 카테고리의 다른 글
[TIL] C# 박싱과 언박싱 (1) | 2025.05.02 |
---|---|
[TIL] 직렬화 (Serialization) (1) | 2025.03.11 |
[TIL] C# 싱글톤 패턴 (0) | 2025.03.06 |
[TIL] C# 프로그래머스 _ 아이스아메리카노 (2) | 2025.02.13 |
[TIL] 텍스트 RPG_ Item 클래스에 SetBonus 기능 추가하기 (0) | 2025.02.12 |