큐 자료 구조
큐는 컴퓨터 과학에서 선입선출(FIFO) 자료 구조입니다.
즉, 큐에 가장 먼저 추가된 요소는 가장 먼저 제거됩니다.
큐는 배열이나 연결 목록을 사용하여 구현할 수 있습니다.
배열을 사용하여 큐를 구현할 때는 큐의 처음과 끝을 가리키는 포인터를 사용합니다.
요소를 추가하려면 큐의 끝에 추가하고 요소를 제거하려면 큐의 처음에서 제거합니다.
Linked List을 사용하여 큐를 구현할 때는 각 요소에 포인터를 사용하는 Linked List을 사용합니다.
요소를 추가하려면 새 요소를 연결 목록의 끝에 추가하고 요소를 제거하려면 연결 목록의 처음에서 제거합니다.
큐는 간단한 자료 구조이지만 매우 유용합니다. 데이터가 입력된 시간 순서대로 처리해야 하는 상황에 자주 사용됩니다.
다음은 큐가 사용되는 몇 가지 예입니다.
- 프린터의 출력 처리: 프린터는 큐를 사용하여 인쇄할 문서를 저장합니다. 프린터가 문서를 인쇄할 준비가 되면 큐의 처음에 있는 문서를 인쇄합니다.
- 운영 체제의 메시지 처리: 운영 체제는 큐를 사용하여 프로세스에서 보낸 메시지를 저장합니다. 운영 체제가 메시지를 처리할 준비가 되면 큐의 처음에 있는 메시지를 처리합니다.
- 프로세스 관리: 운영 체제는 큐를 사용하여 실행 대기 중인 프로세스를 저장합니다. 운영 체제가 프로세스를 실행할 준비가 되면 큐의 처음에 있는 프로세스를 실행합니다.
큐는 매우 유용한 자료 구조이며 다양한 상황에서 사용할 수 있습니다.
자바에서 대표적인 Queue
- PriorityQueue
- 큐에 추가된 순서와 상관없이 먼저 생성된 객체가 먼저 나오도록 되어있는 큐
- LinkedBlockingQueue
- 저장할 데이터의 크기를 선택적으로 정할 수도 있는 FIFO 기반의 링크 노드를 사용하는 블로킹 큐
- ArrayBlockingQueue
- 저장할 데이터의 크기가 정해져 있는 FIFO 기반의 링크 노드를 사용하는 블로킹 큐
- PriorityBlockingQueue
- 저장되는 데이터의 크기가 정해져있지 않고, 객체의 생성순서에 따라서 순서가 저장되는 블로킹 큐
- DelayQueue
- 큐에 대기하는 시간을 지정하여 처리하도록 되어 있는 큐
- SynchronousQueue
- put() 메서드는 호출하면, 다른 스레드에서는 take() 메서드가 호출될 때까지 대기하도록 되어있는 큐
이 큐에 저장되는 데이터가 없다. API에서 제공하는 대부분의 메서드는 ()이나 null을 리턴한다.
- put() 메서드는 호출하면, 다른 스레드에서는 take() 메서드가 호출될 때까지 대기하도록 되어있는 큐