본문 바로가기

JAVA

[Java] Queue 자료구조와 Queue 인터페이스란?

Queue 자료구조

선입 선출(First In, First Out, FIFO) 방식의 자료구조이다.

 


 

Queue 인터페이스

선입선출(FIFO) 구조를 정의하고, 큐 자료구조에 필요한 기본 동작(메서드들)을 약속하는 추상적인 인터페이스이다.

 

 

import java.util.Queue;

자바 util 패키지에 포함되어 있다.

 

 

1. 객체 생성

Queue<String> set = new Queue<>();	// ❌ 불가능

Queue<String> set = new LinkedList<>();	            // ✅ 가능
Queue<String> set = new PriorityQueue<>();          // ✅ 가능
Queue<String> set = new ArrayDeque<>();	            // ✅ 가능
Queue<String> set = new concurrentLinkedQueue<>();  // ✅ 가능
Queue<String> set = new LinkedBlockingQueue<>();    // ✅ 가능
  • Java에서 제공하는 Queue 인터페이스(Queue<k>)는 객체를 직접 생성 ❌.
    (추가 정보 확인 : https://kimyongjun0129.tistory.com/98)
  • 따라서 LinkedList, PriorityQueue, ArrayDeque 등의 구현체(클래스)를 사용해야 한다.
  • 위 코드에서 처럼 작성하는 이유 :
    1. 코드의 유연성 증가 : 필요에 따라 다른 구현체로 쉽게 교체할 수 있다.
    2. 다형성(Polymorphism) 활용 : 현체에 의지 ❌, 하나의 인터페이스로 여러 가지 구현체를 사용할 수 있다. 

 

 

import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.ArrayDeque;
...

다른 구현체(클래스)를 사용할 때는 import를 시켜줘야 한다.

 

 

2. 주요 구현체

구현 클래스 특징
LinkedList Queue, Deque, List 등 다중 인터페이스 구현. 가장 흔하게 사용됨
PriorityQueue 우선순위 큐. 작은 값(기본 min-heap)이 먼저 나옴
ArrayDeque 큐와 덱을 모두 빠르게 구현. Array 기반. Null 허용 안 함
ConcurrentLinkedQueue 멀티스레드 환경에서 안전한 비동기 큐
LinkedBlockingQueue 블로킹 큐 (멀티스레드, 생산자-소비자 패턴에 사용)

 

 

3. 주요 공통 메서드들

메서드 설명
add(E e) 큐에 요소를 추가 (❗예외 발생 가능)
offer(E e) 큐에 요소를 추가 (실패 시 false 반환)
remove() 큐에서 요소 제거 ( 예외 발생 가능)
poll() 큐에서 요소 제거 (비어있으면 null 반환)
element() 큐의 front 조회 ( 예외 발생 가능)
peek() 큐의 front 조회 (비어있으면 null 반환)

Queue의 주요 메서드는 Queue 인터페이스에 정의된 것들이라 모든 Queue 구현체( LinkedList, PriorityQueue, ArrayDeque 등)에서 사용 가능 ✅

 

만약,  인터페이스를 통해 구현된 공통 메서드들이 아닌 각 구현체(클래스)의 기능을 사용하고 싶다면

PriorityQueue<String> queue = new PriorityQueue<>();

다음과 같이 인터페이스가 아닌 클래스를 이용하여 변수를 선언하고 할당하면 된다.

 

 

4. 사용 예제

더보기
더보기
import java.util.Queue;
import java.util.LinkedList;

public class QueueExample {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();

        queue.offer("A");
        queue.offer("B");
        queue.offer("C");

        System.out.println("Peek: " + queue.peek()); // A
        System.out.println("Poll: " + queue.poll()); // A
        System.out.println("After Poll: " + queue); // [B, C]
    }
}

 

'JAVA' 카테고리의 다른 글

[Java] Wrapper Class란?  (0) 2025.04.16
[Java] 상속(Inheritance)이란?  (0) 2025.04.15
[Java] Set 자료구조와 Set 인터페이스란?  (0) 2025.04.14
[Java] List 자료 구조와 List 인터페이스란?  (0) 2025.04.14
[Java] Collection이란?  (0) 2025.04.14