Java Queue 인터페이스 마스터: 메서드, 구현체, 실전 활용
Java Queue 인터페이스 완전 정복
Java Queue 인터페이스가 FIFO 자료구조를 어떻게 구현하는지, 핵심 메서드와 대표적인 구현 클래스들을 살펴봅니다.
Queue를 구현하는 클래스들
Queue는 인터페이스이므로 실제 기능을 제공하는 구체적인 클래스를 사용합니다. 가장 널리 쓰이는 세 가지 구현체는:
ArrayDeque – 크기 조절 가능한 양방향 큐로, 추가/삭제 연산이 빠릅니다.
LinkedList – 이중 연결 리스트로 큐와 덱 연산을 모두 지원합니다.
PriorityQueue – 힙 기반 큐로 자연 순서나 제공된 비교자로 요소를 정렬합니다.
Queue를 확장하는 서브인터페이스
Queue 인터페이스는 블로킹 또는 양방향 기능을 추가하는 여러 서브인터페이스로 확장됩니다:
Deque – 양쪽 끝에서 푸시/팝 연산 추가
BlockingQueue – 선택적 타임아웃과 함께 스레드 안전 엔큐/디큐 도입
BlockingDeque – 블로킹과 양방향 의미론 결합
Queue 자료구조의 동작
큐는 선입선출(FIFO, First-In First-Out) 원칙으로 동작합니다: 요소는 후미에 추가되고 앞에서 제거됩니다.
Java에서 Queue 사용하기
java.util.Queue 인터페이스를 임포트하고 구체 클래스로 인스턴스화하세요:
import java.util.Queue;
import java.util.LinkedList;
import java.util.ArrayDeque;
import java.util.PriorityQueue;
Queue<String> animal1 = new LinkedList<>();
Queue<String> animal2 = new ArrayDeque<>();
Queue<String> animal3 = new PriorityQueue<>();
각 객체는 전체 Queue 메서드와 제네릭 Collection API를 상속받습니다.
Queue 핵심 메서드
인터페이스는 Collection을 확장하므로 모든 메서드를 포함합니다. 가장 자주 사용되는 큐 전용 연산은:
- add(E e) – 요소 삽입, 실패 시 예외 발생
- offer(E e) – 요소 삽입, 실패 시
false 반환(예외 없음)
- element() – 헤드 조회(제거 안 함), 비어있으면 예외 발생
- peek() – 헤드 조회(제거 안 함), 비어있으면
null 반환
- remove() – 헤드 제거 및 반환, 비어있으면 예외 발생
- poll() – 헤드 제거 및 반환, 비어있으면
null 반환
LinkedList 구현 예제
import java.util.Queue;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
Queue<Integer> numbers = new LinkedList<>();
numbers.offer(1);
numbers.offer(2);
numbers.offer(3);
System.out.println("Queue: " + numbers);
int accessed = numbers.peek();
System.out.println("Accessed Element: " + accessed);
int removed = numbers.poll();
System.out.println("Removed Element: " + removed);
System.out.println("Updated Queue: " + numbers);
}
}
출력
Queue: [1, 2, 3] Accessed Element: 1 Removed Element: 1 Updated Queue: [2, 3]
자세한 내용은 Java LinkedList를 참조하세요.
PriorityQueue 구현 예제
import java.util.Queue;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
Queue<Integer> numbers = new PriorityQueue<>();
numbers.offer(5);
numbers.offer(1);
numbers.offer(2);
System.out.println("Queue: " + numbers);
int accessed = numbers.peek();
System.out.println("Accessed Element: " + accessed);
int removed = numbers.poll();
System.out.println("Removed Element: " + removed);
System.out.println("Updated Queue: " + numbers);
}
}
출력
Queue: [1, 5, 2] Accessed Element: 1 Removed Element: 1 Updated Queue: [2, 5]
자세한 내용은 Java PriorityQueue를 참조하세요.
Deque, BlockingQueue, BlockingDeque 등 Queue 서브인터페이스와 실전 활용법을 다룰 예정입니다.