[java] 자바 큐 인터페이스의 버퍼 큐 활용 방법

자바에서 큐(Queue)는 FIFO(First-In-First-Out) 형식으로 데이터를 저장하고 처리하는 자료 구조입니다. 큐는 자바 컬렉션 프레임워크에서 java.util.Queue 인터페이스를 통해 제공됩니다. 이번에는 큐 인터페이스 중에서 버퍼 큐(Buffered Queue)를 활용하는 방법에 대해 알아보겠습니다.

버퍼 큐(Buffered Queue)란?

버퍼 큐는 일정 크기의 고정된 용량(capacity)을 가지고 있으며, 큐가 가득 찬 상태에서는 요소를 추가할 수 없습니다. 또한, 버퍼 큐에서 요소를 꺼내면 해당 요소는 큐에서 제거됩니다.

java.util.Queue 인터페이스 구현체 중 버퍼 큐

자바에서 java.util.Queue 인터페이스를 구현한 여러 클래스 중에서 버퍼 큐로 활용할 수 있는 java.util.concurrent.ArrayBlockingQueue 클래스가 있습니다. 이 클래스는 배열 기반의 고정된 크기의 버퍼 큐를 구현하고 있어 다중 스레드 환경에서 안전하게 요소를 추가하거나 제거할 수 있습니다.

ArrayBlockingQueue 사용 예제

다음은 ArrayBlockingQueue를 사용하여 버퍼 큐를 생성하고 요소를 추가하고 제거하는 간단한 예제입니다.

import java.util.concurrent.ArrayBlockingQueue;

public class BufferQueueExample {
    public static void main(String[] args) {
        // 용량이 3인 버퍼 큐 생성
        ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<>(3);

        // 요소 추가
        queue.put("First");
        queue.put("Second");
        queue.put("Third");

        // 요소 제거
        System.out.println(queue.take());
        System.out.println(queue.take());
        System.out.println(queue.take());
    }
}

위 예제에서는 ArrayBlockingQueue를 사용하여 용량이 3인 버퍼 큐를 생성하고, put() 메서드를 이용하여 요소를 추가하고, take() 메서드를 이용하여 요소를 제거하고 있습니다. 이를 실행하면 큐의 FIFO 순서에 맞게 요소가 추가 및 제거될 것입니다.

버퍼 큐는 다수의 프로듀서(생산자)와 컨슈머(소비자)를 지원하며, 스레딩 모델에서 안전하게 데이터를 관리할 수 있는 유용한 자료 구조입니다. 다중 스레드를 다루거나 데이터의 안전한 교환을 위한 프로그램을 개발할 때, ArrayBlockingQueue와 같은 버퍼 큐를 적절히 활용할 수 있습니다.

이상으로 자바의 Queue 인터페이스 중 버퍼 큐를 활용한 방법에 대해 살펴보았습니다.