C#에서는 배열이나 리스트 같은 기존 컬렉션을 활용하여 새로운 Queue(큐)를 손쉽게 생성할 수 있습니다. Queue<T> 클래스는 IEnumerable<T> 인터페이스를 구현하는 모든 컬렉션을 매개변수로 받는 생성자를 제공하기 때문입니다.
핵심 개념
Queue<T> 생성자에 컬렉션을 전달하면 해당 컬렉션의 요소들이 순서대로 복사되어 새로운 큐가 초기화됩니다. 예를 들어 ToArray() 메서드로 기존 큐를 배열로 변환한 뒤, 그 배열을 사용해 또 다른 큐를 만들 수 있습니다.
예제 1: 문자열 큐 복제하기
다음은 문자열 요소를 담은 큐를 배열로 변환한 후, 그 배열로 새로운 큐를 생성하는 코드입니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
Queue<string> queue = new Queue<string>();
queue.Enqueue("One");
queue.Enqueue("Two");
queue.Enqueue("Three");
Console.WriteLine("Queue elements...");
foreach(string str in queue) {
Console.WriteLine(str);
}
Console.WriteLine("\nArray elements...");
Queue<string> arr = new Queue<string>(queue.ToArray());
foreach(string str in arr) {
Console.WriteLine(str);
}
}
}
출력 결과
위 코드를 실행하면 아래와 같은 결과가 출력됩니다.
Queue elements...
One
Two
Three
Array elements...
One
Two
Three
실행 결과를 보면 원본 큐와 배열 기반으로 새로 생성된 큐가 동일한 순서로 동일한 요소를 가지고 있음을 확인할 수 있습니다.
예제 2: 정수형 큐 복제하기
이번에는 정수(int) 타입의 큐에 여러 값을 넣은 뒤, 같은 방식으로 새로운 큐를 생성해 보겠습니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
Queue<int> queue = new Queue<int>();
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 elements...");
foreach(int val in queue) {
Console.WriteLine(val);
}
Console.WriteLine("\nArray elements...");
Queue<int> arr = new Queue<int>(queue.ToArray());
foreach(int val in arr) {
Console.WriteLine(val);
}
}
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 나타납니다.
Queue elements...
100
200
300
400
500
600
700
800
900
1000
Array elements...
100
200
300
400
500
600
700
800
900
1000
정리
이처럼 Enqueue()로 요소를 추가하고, ToArray()로 배열을 얻은 뒤 이를 새 큐의 생성자에 전달하면 기존 컬렉션과 동일한 내용을 가진 새로운 Queue를 간단하게 만들 수 있습니다. 이 방식은 큐를 복제하거나, 배열·리스트 등 다른 컬렉션의 데이터를 FIFO(선입선출) 구조로 처리해야 할 때 특히 유용합니다.