IEnumerable vs IEnumerator
1. IEnumerable
IEnumerable 은 IEnumerator 와 함께 자주 등장하는 개념이다.
IEnumerable 은 C# 에서 반복 가능한 ( 순회 가능한 ) 컬렉션을 나타내는 인터페이스이다.
namespace System.Collections
{
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
}
이 객체는 내부의 요소들을 하나씩 꺼내서 반복할 수 있다는 의미이다.
- foreach 문을 사용할 수 있게 해준다
- List , Array , Dictionary , Queue , Stack 같은 대부분의 컬렉션 클래스들은 모두 IEumerable 을 구현한다.
2. IEnumerator
C# 에서 열거자 ( Enumerator ) 를 나타내는 인터페이스이다
코루틴 ( Coroutine ) 과 컬렉션 순회 ( 반복 ) 둘 다에서 자주 등장한다.
하지만 용도에 따라 의미가 살짝 달라진다.
반복을 제어하는 인터페이스
namespace System.Collections
{
public interface IEnumerator
{
object Current { get; }
bool MoveNext();
void Reset();
}
}
리스트나 배열 같은 컬렉션을 foreach 로 순회할 때 내부적으로 사용하는 인터페이스이다.
- object Current { get; } : 현재 요소를 반환
- bool MoveNext( ); : 다음 요소로 이동 , 다음 데이터 요소가 있으면 true 없으면 false
- void Reset( ) : 처음 위치로 되돌린다 ( 선택적 )
3. Unity에서의 IEnumerator 코루틴 함수 반환형
Unity 에서는 코루틴을 구현할 때 IEnumerator 가 사용된다.
IEnumerator MoveToTarget()
{
Debug.Log("이동 시작");
yield return new WaitForSeconds(1f); // 1초 대기
Debug.Log("1초 뒤 이동 완료");
}
이 함수는 StartCoroutine ( MovetToTarget () ) 으로 실행된다.
- yield return 키워드는 일시정지 후 다음 프레임에 재개를 의미한다
- IEnumerator 는 코루틴의 진행 상태를 제어하기 위해 사용되는 열거자 역할을 한다
- Unity 엔진은 내부적으로 moveNext() 를 매 프레임마다 호출
└ yield return 의 조건이 충족되면 다음 단계로 넘어간다
4. Unity 코루틴의 흐름
| 단계 | 동작 | 내부적으로 일어나는 일 |
| 1 | StartCoroutine 호출 | IEnumerator 객체 생성 |
| 2 | 첫 번째 MoveNext( ) 호출 | yield return 을 만나면 멈춘다 |
| 3 | 다음 프레임마다 MoveNext( ) 재호출 | WaitForSeconds , null 조건 등을 체크 |
| 4 | MoveNext( ) 가 false 을 반환하면 종료 | 코루틴이 끝난다 |
정리
- IEnumerable : 반복 가능한 객체 ( 컬렉션의 집합 ) 을 나타내는 인터페이스
└ 반복을 시작할 수 있는 컬렉션
└ 비유 : "전체 책" - IEnumerator : 현재 요소를 가리키며 반복 상태를 제어하는 열거자
└ 컬렉션을 하나씩 순회하는 도구
└ 비유 : "지금 읽고 있는 페이지를 기억하는 사람"
'🧊Unity Basic > 코루틴&이벤트' 카테고리의 다른 글
| 유니티 액션 ( Unity Action ) (0) | 2025.10.20 |
|---|---|
| 유니티 이벤트 ( Unity Event ) (0) | 2025.10.20 |
| Coroutine 핵심 키워드 (0) | 2025.10.18 |
| WaitForSeconds vs WaitForSecondsRealtime (0) | 2025.10.18 |
| 코루틴 ( Coroutine ) (0) | 2025.10.18 |