C#의 Queue.GetEnumerator() 메서드는 큐(Queue)에 저장된 요소들을 처음부터 끝까지 순회할 수 있는 열거자(enumerator)를 반환합니다. 이 메서드를 활용하면 foreach 문이나 while 문을 통해 큐의 각 요소에 순차적으로 접근할 수 있습니다.
구문(Syntax)
Queue.GetEnumerator() 메서드의 기본 구문은 다음과 같습니다.
public virtual System.Collections.IEnumerator GetEnumerator ();
사용 예제 1
다음은 GetEnumerator() 메서드를 사용해 두 개의 큐를 생성하고, 각 큐의 요소를 열거자로 순회하며 출력한 뒤 두 큐가 같은지 비교하는 예제입니다.
using System;
using System.Collections;
public class Demo {
public static void Main(){
Queue queue = new Queue();
queue.Enqueue(100);
queue.Enqueue(200);
queue.Enqueue(300);
queue.Enqueue(400);
Console.WriteLine("Queue1...");
IEnumerator demoEnum = queue.GetEnumerator();
while (demoEnum.MoveNext()){
Console.WriteLine(demoEnum.Current);
}
Queue queue2 = new Queue();
queue2.Enqueue(100);
queue2.Enqueue(150);
queue2.Enqueue(300);
queue2.Enqueue(400);
Console.WriteLine("\nQueue2...");
demoEnum = queue2.GetEnumerator();
while (demoEnum.MoveNext()){
Console.WriteLine(demoEnum.Current);
}
Console.WriteLine(queue.Equals(queue2));
}
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Queue1... 100 200 300 400 Queue2... 100 150 300 400 False
두 큐는 일부 요소가 서로 다르기 때문에 Equals() 비교 결과 False가 반환된 것을 확인할 수 있습니다.
사용 예제 2
이번에는 더 많은 요소를 가진 큐를 만들고, GetEnumerator() 메서드로 전체 요소를 순회하는 예제입니다.
using System;
using System.Collections;
public class Demo {
public static void Main(){
Queue queue = new Queue();
queue.Enqueue(100);
queue.Enqueue(200);
queue.Enqueue(300);
queue.Enqueue(400);
queue.Enqueue(500);
queue.Enqueue(600);
queue.Enqueue(700);
queue.Enqueue(800);
queue.Enqueue(900);
queue.Enqueue(1000);
Console.WriteLine("Queue...");
IEnumerator demoEnum = queue.GetEnumerator();
while (demoEnum.MoveNext()){
Console.WriteLine(demoEnum.Current);
}
}
}실행 결과
위 코드를 실행하면 아래와 같이 큐에 저장된 모든 요소가 FIFO(선입선출) 순서대로 출력됩니다.
Queue... 100 200 300 400 500 600 700 800 900 1000
핵심 포인트 정리
- GetEnumerator()는 큐의 요소를 순회하는 IEnumerator 객체를 반환합니다.
- MoveNext() 메서드는 다음 요소로 이동하며, 더 이상 요소가 없으면 false를 반환합니다.
- Current 속성으로 현재 위치의 요소 값에 접근할 수 있습니다.
- 열거자는 큐의 요소를 읽기만 하며, 순회 중에는 원본 데이터가 변경되지 않습니다.