본문 바로가기

자료구조

큐 Queue

큐 자료 구조

큐는 컴퓨터 과학에서 선입선출(FIFO) 자료 구조입니다.

즉, 큐에 가장 먼저 추가된 요소는 가장 먼저 제거됩니다.

 

큐는 배열이나 연결 목록을 사용하여 구현할 수 있습니다.

배열을 사용하여 큐를 구현할 때는 큐의 처음과 끝을 가리키는 포인터를 사용합니다.

요소를 추가하려면 큐의 끝에 추가하고 요소를 제거하려면 큐의 처음에서 제거합니다.

 

Linked List을 사용하여 큐를 구현할 때는 각 요소에 포인터를 사용하는 Linked List을 사용합니다.

요소를 추가하려면 새 요소를 연결 목록의 끝에 추가하고 요소를 제거하려면 연결 목록의 처음에서 제거합니다.

 

큐는 간단한 자료 구조이지만 매우 유용합니다. 데이터가 입력된 시간 순서대로 처리해야 하는 상황에 자주 사용됩니다.

다음은 큐가 사용되는 몇 가지 예입니다.

  • 프린터의 출력 처리: 프린터는 큐를 사용하여 인쇄할 문서를 저장합니다. 프린터가 문서를 인쇄할 준비가 되면 큐의 처음에 있는 문서를 인쇄합니다.
  • 운영 체제의 메시지 처리: 운영 체제는 큐를 사용하여 프로세스에서 보낸 메시지를 저장합니다. 운영 체제가 메시지를 처리할 준비가 되면 큐의 처음에 있는 메시지를 처리합니다.
  • 프로세스 관리: 운영 체제는 큐를 사용하여 실행 대기 중인 프로세스를 저장합니다. 운영 체제가 프로세스를 실행할 준비가 되면 큐의 처음에 있는 프로세스를 실행합니다.

큐는 매우 유용한 자료 구조이며 다양한 상황에서 사용할 수 있습니다.

 

자바에서 대표적인 Queue

  • PriorityQueue
    • 큐에 추가된 순서와 상관없이 먼저 생성된 객체가 먼저 나오도록 되어있는 큐
  • LinkedBlockingQueue
    • 저장할 데이터의 크기를 선택적으로 정할 수도 있는 FIFO 기반의 링크 노드를 사용하는 블로킹 큐
  • ArrayBlockingQueue
    • 저장할 데이터의 크기가 정해져 있는 FIFO 기반의 링크 노드를 사용하는 블로킹 큐
  • PriorityBlockingQueue
    • 저장되는 데이터의 크기가 정해져있지 않고, 객체의 생성순서에 따라서 순서가 저장되는 블로킹 큐
  • DelayQueue
    • 큐에 대기하는 시간을 지정하여 처리하도록 되어 있는 큐
  • SynchronousQueue
    • put() 메서드는 호출하면, 다른 스레드에서는 take() 메서드가 호출될 때까지 대기하도록 되어있는 큐
      이 큐에 저장되는 데이터가 없다. API에서 제공하는 대부분의 메서드는 ()이나 null을 리턴한다.