Queue 클래스 (System.Collections.Generic)

큐 (Queue)는 먼저 추가된 데이터가 먼저 출력 처리되는 (FIFO, First In First Out) 자료 구조(선입선출)

로서 입력된 순서대로 처리해야 하는 상황에 이용됩니다. Queue는 맨 뒤(tail)에 데이터를 계속

추가하고, 맨 앞(head)에서만 데이터를 읽기 때문에 순차적으로 데이터를 처리하게 됩니다.

.NET에는 큐를 구현한 Queue클래스와 이의 Generic 형태인 Queue<T> 클래스가 있습니다.

이 Queue 클래스는 내부적으로 순환 배열 (Circular Array)로 구현되어 있는데, 배열의 마지막 요소에

다다른 경우 다시 배열 처음 요소로 순환하는 구조를 가지고 있습니다.

Queue는 내부적으로 head와 tail 포인터를 가지고 있는데, tail에 데이터를 추가하고 (Enqueue) head

에서 데이터를 읽고 제거 (Dequeue)합니다. 만약 데이터 양이 많아 순환 배열이 모두 찰 경우, Queue

는 Capacity를 2배로 (디폴트 Growth Factor가 2이다) 증가시키고, 모든 배열 요소를 새 순환 배열에

자동으로 복사하여 큐를 확장합니다.

Queue<int> q = new Queue<int>();
q.Enqueue(120);
q.Enqueue(130);
q.Enqueue(150);

int next = q.Dequeue(); // 120
next = q.Dequeue(); // 130

ConcurrentQueue 클래스

멀티쓰레딩 환경에서 위의 Queue 클래스를 사용하기 위해서는 전통적인 방식인 lock 을 사용하는