본문 바로가기
유니티/개념 정리

IEnumerable과 IEnumerator

by fore4022 2024. 11. 18.

IEnumerable과 IEnumerator 차이점

두 인터페이스 모두, 컬렉션이 Generic이 아니라는 것이 기본 전재이다.

IEnumerable

열거가 가능하다는 것을 나타내는 인터페이스다.

  • GetEnumerator를 통해서 IEnumerator를 반환해 준다.

IEnumerator

각각의 요소로 사용 가능하도록, 순차적인 접근 기능을 제공하는 인터페이스다.

  • Current에 해당하는 컬렉션의 요소를 사용할 수 있도록 제공한다.
  • Reset과 MoveNext는 foreach 지원을 위해 구현된다.

IEnumerable과 IEnumerator의 구분

위의 차이점을 살펴본다면 아래와 같은 의문이 생길 것이다.

"그러면 IEnumerable로 인터페이스를 따로 만든 이유가 있나요?"
"IEnumerator 인터페이스 하나로, 구현해서 사용해도 되지 않을까요?"

둘의 의미부터 한번 살펴보도록 하겠다.

IEnumerable : 열거할 수 있다.
IEnumerator : 열거하는 기능을 가진다.

위의 의미를 통해서, 두 인터페이스를 상속받은 클래스로 다시 살펴보겠다.

IEnumerable를 상속 받은 클래스 : 자신을 열거할 수 있다.
IEnumerator를 상속 받은 클래스 : 열거하는 기능을 가진다. 하지만, 스스로 열거될 수 없다.

구분한 이유를 다시 살펴보자면, IEnumerable은 컬렉션이 열거 가능하다는 것을 의미하는 것이고, IEnumerator는 컬렉션의 열거 방식에 대한 정의를 위한 인터페이스로 볼 수 있다.

조금 다른 방식으로 설명하면 아래와 같다.

IEnumerable : 전원을 켤 수 있는 기계장치
IEnumerator : 전원이 켜지는 기능이 있는 기계장치이다. 하지만, 스스로 전원이 켜질 수 없다.
"전원을 키는 것을 나타내는 인터페이스가 IEnumerable이다."
"전원이 켜지는 기능을 가진다는 것을 나타내는 인터페이스가 IEnumerator이다."

Coroutine의 IEnumerator

private IEnumerator Example()
{
	Debug.Log("Example IEnumerator");
	
	yield return null;
}

IEnumerator

C#의 IEnumerator를 사용한다. 하지만, 유니티에서는 코루틴에 사용된다.

코루틴에 사용되는 IEnumerator는 ‘반복자’라는 의미를 가진다.

'유니티 > 개념 정리' 카테고리의 다른 글

GC(Garbage Collector)  (0) 2024.11.25
대리자 활용  (0) 2024.11.19
Predicate(술어)  (0) 2024.11.11
Static(정적)  (0) 2024.11.04
Interface  (0) 2024.10.30