C#의 Queue.CopyTo() 메서드는 큐(Queue)에 저장된 모든 요소를 기존의 1차원 배열(Array)로 복사할 때 사용됩니다. 이때 복사가 시작되는 위치를 지정된 배열 인덱스부터 설정할 수 있어, 배열의 특정 구간에 큐 데이터를 삽입하는 것이 가능합니다.
CopyTo() 메서드 문법
Queue.CopyTo() 메서드의 기본 문법은 다음과 같습니다.
public virtual void CopyTo (Array arr, int index);
매개변수 설명
- arr: 큐에서 복사한 요소들이 저장될 대상 1차원 배열입니다.
- index: 복사가 시작되는 배열 내 인덱스로, 0부터 시작하는(zero-based) 값을 사용합니다.
예제 1: 정수형 큐를 배열로 복사하기
다음 예제는 int 타입의 큐를 생성하고, CopyTo() 메서드를 이용해 배열의 지정된 인덱스부터 요소를 복사하는 과정을 보여줍니다.
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);
Console.Write("요소 개수 = ");
Console.WriteLine(queue.Count);
Console.WriteLine("큐 내용...");
foreach(int i in queue) {
Console.WriteLine(i);
}
Console.WriteLine("큐에 500이 포함되어 있는가? = " + queue.Contains(500));
int[] intArr = new int[5];
intArr[0] = 1;
intArr[1] = 2;
intArr[2] = 3;
intArr[3] = 4;
queue.CopyTo(intArr, 1);
Console.WriteLine("\n큐 (업데이트 후)");
foreach(int i in queue) {
Console.WriteLine(i);
}
Console.WriteLine("\n배열 (업데이트 후)");
foreach(int i in intArr) {
Console.WriteLine(i);
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
요소 개수 = 3 큐 내용... 100 200 300 큐에 500이 포함되어 있는가? = False 큐 (업데이트 후) 100 200 300 배열 (업데이트 후) 1 100 200 300 0
출력 결과를 보면, CopyTo(intArr, 1) 호출 시 인덱스 1부터 큐의 요소(100, 200, 300)가 순서대로 복사되어 기존 값(2, 3, 4)을 덮어쓴 것을 확인할 수 있습니다. 인덱스 0의 값(1)은 그대로 유지되며, 마지막 인덱스 4에는 복사되지 않아 기본값 0이 남습니다.
예제 2: 문자열 큐를 배열로 복사하기
이번에는 string 타입의 큐를 활용한 예제입니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
Queue<string> queue = new Queue<string>();
queue.Enqueue("Tim");
queue.Enqueue("Jack");
queue.Enqueue("Nathan");
queue.Enqueue("Tom");
queue.Enqueue("David");
queue.Enqueue("Mark");
Console.Write("요소 개수 = ");
Console.WriteLine(queue.Count);
Console.WriteLine("큐 내용...");
foreach(string i in queue) {
Console.WriteLine(i);
}
string[] strArr = new string[10];
strArr[0] = "AB";
strArr[1] = "BC";
strArr[2] = "DE";
strArr[3] = "EF";
queue.CopyTo(strArr, 1);
Console.WriteLine("\n큐 (업데이트 후)");
foreach(string i in queue) {
Console.WriteLine(i);
}
Console.WriteLine("\n배열 (업데이트 후)");
foreach(string i in strArr) {
Console.WriteLine(i);
}
}
}실행 결과
요소 개수 = 6 큐 내용... Tim Jack Nathan Tom David Mark 큐 (업데이트 후) Tim Jack Nathan Tom David Mark 배열 (업데이트 후) AB Tim Jack Nathan Tom David Mark
이 예제에서도 마찬가지로 인덱스 1부터 큐의 6개 문자열 요소가 배열로 복사되었습니다. 인덱스 0의 "AB"는 그대로 유지되고, 나머지 기존 값들은 큐 요소들로 대체되었습니다.
정리 및 주의사항
- CopyTo() 메서드는 큐 자체를 변경하지 않으며, 원본 큐의 요소는 그대로 유지됩니다.
- 복사 시작 인덱스와 큐의 요소 수를 합친 크기가 배열 범위를 초과하면 ArgumentException 또는 ArgumentOutOfRangeException이 발생할 수 있습니다.
- 배열이 null인 경우 ArgumentNullException이 발생합니다.
- 복사 작업은 큐에 저장된 순서(FIFO)대로 진행됩니다.