반응형

`java.util.AbstractQueue`는 자바 컬렉션 프레임워크에서 `Queue` 인터페이스를 구현하는 추상 클래스입니다. 이 클래스는 `Queue` 인터페이스의 일부 메서드를 구현하고 나머지 메서드를 구현하는 서브클래스에게 구현을 위임합니다.

`AbstractQueue` 클래스는 큐의 일반적인 속성을 구현하는 메서드를 제공합니다. 예를 들어, `offer()` 메서드는 큐에 요소를 추가하고, `poll()` 메서드는 큐에서 요소를 제거하고 반환합니다. 또한 `peek()` 메서드는 큐에서 다음에 제거될 요소를 반환합니다.

그러나 `AbstractQueue` 클래스는 큐의 구체적인 구현 방법에 대해 아무런 가정을 하지 않습니다. 따라서 구체적인 구현 방법은 서브클래스에서 구현해야 합니다.

`AbstractQueue` 클래스는 또한 `Iterator` 인터페이스를 구현하는 `iterator()` 메서드를 제공합니다. 이를 통해 서브클래스는 큐의 모든 요소를 반복할 수 있습니다.

`AbstractQueue` 클래스는 추상 클래스이기 때문에 직접 인스턴스화할 수 없습니다. 따라서 `AbstractQueue` 클래스를 상속받아서 구체적인 큐를 구현해야 합니다.

`AbstractQueue` 클래스의 서브클래스로는 `ArrayBlockingQueue`, `ConcurrentLinkedQueue`, `LinkedBlockingQueue` 등이 있습니다.`AbstractQueue` 클래스의 주요 메서드들은 다음과 같습니다.

- `offer(E e)` : 지정된 요소를 큐에 추가하고, 성공적으로 추가되면 true를 반환합니다. 큐에 더 이상 공간이 없는 경우 false를 반환합니다.
- `poll()` : 큐의 head 요소를 제거하고 반환합니다. 큐가 비어있는 경우 null을 반환합니다.
- `peek()` : 큐의 head 요소를 반환합니다. 큐가 비어있는 경우 null을 반환합니다.
- `element()` : 큐의 head 요소를 반환합니다. 큐가 비어있는 경우 NoSuchElementException을 발생시킵니다.
- `remove()` : 큐의 head 요소를 제거하고 반환합니다. 큐가 비어있는 경우 NoSuchElementException을 발생시킵니다.

서브클래스에서는 다음 메서드들을 반드시 구현해야 합니다.

- `add(E e)` : 지정된 요소를 큐에 추가합니다. 큐에 더 이상 공간이 없는 경우 IllegalStateException을 발생시킵니다.
- `remove()` : 큐의 head 요소를 제거하고 반환합니다. 큐가 비어있는 경우 NoSuchElementException을 발생시킵니다.
- `element()` : 큐의 head 요소를 반환합니다. 큐가 비어있는 경우 NoSuchElementException을 발생시킵니다.

`AbstractQueue` 클래스를 상속받아 구현된 서브클래스는 다양한 용도로 활용될 수 있습니다. `ArrayBlockingQueue` 클래스는 크기가 고정된 배열로 구현된 블로킹 큐를 제공합니다. `ConcurrentLinkedQueue` 클래스는 스레드 안전하게 구현된 링크드 리스트로 구현된 큐를 제공합니다. `LinkedBlockingQueue` 클래스는 링크드 리스트로 구현된 블로킹 큐를 제공합니다. 

`AbstractQueue` 클래스는 다른 컬렉션 프레임워크와 함께 사용되어 다양한 자료 구조를 구현하는 데 사용될 수 있습니다. 예를 들어, `PriorityQueue` 클래스는 `AbstractQueue` 클래스를 상속받아 구현된 클래스 중 하나이며, 우선순위 큐를 구현하는 데 사용됩니다.`AbstractQueue` 클래스는 추상 클래스이므로 직접 사용할 수는 없습니다. 따라서 이 클래스를 상속받아 구현한 서브클래스를 사용해야 합니다. 다음은 `LinkedBlockingQueue` 클래스를 사용하는 예제 코드입니다.

 

import java.util.concurrent.LinkedBlockingQueue;

public class QueueExample {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<>();
        queue.offer("apple");
        queue.offer("banana");
        queue.offer("cherry");

        while (!queue.isEmpty()) {
            System.out.println(queue.poll());
        }
    }
}


위 예제 코드에서는 `LinkedBlockingQueue` 클래스를 사용하여 큐를 생성합니다. 이후 `offer()` 메서드를 사용하여 세 개의 요소를 추가하고, `poll()` 메서드를 사용하여 요소를 제거하면서 출력합니다. `isEmpty()` 메서드를 사용하여 큐가 비어있는지 확인하고, 비어있지 않은 경우 `poll()` 메서드를 호출하여 요소를 제거하고 출력합니다.

출력 결과는 다음과 같습니다.

 

apple
banana
cherry

 

 

반응형

+ Recent posts