Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Queue.CopyTo() 메서드 완벽 정리 – 큐 요소를 배열로 복사하는 방법

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)대로 진행됩니다.