Queue
큐 (Queue)
Queue: 선입선출(FIFO, First In First Out) 구조의 자료구조. 먼저 들어온 데이터를 먼저 처리한다.
왜 사용하는가?
먼저 들어온 데이터를 먼저 처리해야 하는 순서 보장이 필요한 상황에서 사용한다. 메시지 처리, 작업 대기열, BFS 탐색 등에서 핵심 자료구조다.
어떻게 쓰는가?
// 권장 방식 (ArrayDeque를 큐로 사용)
Queue<String> queue = new ArrayDeque<>();
queue.offer("A"); // 추가 (뒤에 넣기)
queue.offer("B");
queue.offer("C");
queue.poll(); // 꺼내기 → "A" (처음 들어온 것)
queue.peek(); // 확인만 → "B" (제거하지 않음)
queue.isEmpty(); // 비어있는지 확인
Deque (Double-Ended Queue)
양쪽 끝에서 추가·제거가 모두 가능한 자료구조. Queue + Stack 역할을 동시에 할 수 있다.
Deque<Integer> deque = new ArrayDeque<>();
deque.offerFirst(1); // 앞에 추가
deque.offerLast(2); // 뒤에 추가
deque.pollFirst(); // 앞에서 꺼내기
deque.pollLast(); // 뒤에서 꺼내기
컬렉션 계층
어디 상황에서 자주 쓰는가?
| 상황 | 예시 |
|---|---|
| 작업 대기열 | 프린터 인쇄 순서, 메시지 큐 |
| BFS (너비 우선 탐색) | 그래프/트리 탐색 |
| 이벤트 처리 | 이벤트 루프 |
| 스레드풀 작업 관리 | LinkedBlockingQueue |
장점
offer/poll모두 O(1)- 순서 보장이 자연스러운 구조
Deque로 확장 시 Stack 역할도 가능
단점
- 중간 요소에 직접 접근 불가
LinkedList기반 Queue는 노드 생성 오버헤드 존재 →ArrayDeque권장