C#의 Array.GetEnumerator() 메서드는 배열의 요소를 순차적으로 탐색할 수 있는 IEnumerator 객체를 반환합니다. 이 메서드를 활용하면 foreach 문 없이도 배열의 각 요소에 직접 접근하고 제어할 수 있습니다.
구문
메서드의 기본 구문은 다음과 같습니다.
public virtual System.Collections.IEnumerator GetEnumerator();
반환값과 동작 원리
이 메서드는 매개변수를 받지 않으며, 배열의 모든 요소를 순회할 수 있는 System.Collections.IEnumerator 객체를 반환합니다. 반환된 열거자는 다음과 같이 동작합니다.
- MoveNext(): 커서를 다음 요소로 이동시키며, 더 이상 요소가 없으면 false를 반환합니다.
- Current: 현재 위치의 요소 값을 읽어옵니다.
IEnumerator는 처음 생성될 때 첫 번째 요소 앞에 위치하므로, 반드시 MoveNext()를 먼저 호출해야 Current에 유효한 값이 담긴다는 점에 유의하세요.
예제
다음은 Array.GetEnumerator() 메서드를 사용해 문자열 배열을 순회하는 예제입니다.
using System;
using System.Collections;
public class Demo {
public static void Main() {
int j = 0;
Console.WriteLine("배열 요소...");
string[] arr = { "car", "bike", "truck", "bus" };
for (int i = 0; i < arr.Length; i++) {
Console.Write("{0} ", arr[i]);
}
Console.WriteLine();
IEnumerator newEnum = arr.GetEnumerator();
Console.WriteLine("배열의 IEnumerator...");
while ((newEnum.MoveNext()) && (newEnum.Current != null)) {
Console.WriteLine("[{0}] {1}", j++, newEnum.Current);
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
배열 요소... car bike truck bus 배열의 IEnumerator... [0] car [1] bike [2] truck [3] bus
핵심 포인트 정리
- GetEnumerator()는 배열뿐 아니라 List, Dictionary 등 대부분의 .NET 컬렉션에서 지원하는 표준 인터페이스입니다.
- foreach 문이 내부적으로 GetEnumerator()를 호출해 동작하기 때문에, 두 방식은 본질적으로 같은 원리입니다.
- 요소를 하나씩 세밀하게 제어하거나 커스텀 순회 로직이 필요할 때 IEnumerator를 직접 다루면 유용합니다.