반응형
해당 글에서는 Java 11 버전을 기준으로 Queue 인터페이스를 구현한 클래스인 Queue의 메서드의 API에 대해서 확인합니다.
1) Queue
💡 큐(Queue)란?
- 데이터를 일시적으로 쌓아두기 위한 자료구조 중 하나로 선입선출(FIFO, First-In-First-Out)의 특성을 가집니다.
[ 더 알아보기 ]
💡 선입선출(FIFO, First-In-First-Out)
- 자료구조론에서 사용되는 용어로 “가장 먼저 추가된 데이터가 가장 먼저 삭제” 되는 구조를 의미합니다.
[참고] Queue에 대해서 궁금하시면 아래의 글을 참고하면 도움이 됩니다.
1. Queue 구현 클래스
💡 Queue 인터페이스를 기반으로 구현 클래스로는 PriorityQueue, LinkedList, ArrayBlockingQueue, ConcurrentLinkedQueue, LinkedBlockingQueue를 사용할 수 있습니다.
구현 클래스 | 설명 | 특징 |
PriorityQueue | 우선순위 큐를 구현하는데 사용하며 “우선순위가 높은 요소가 먼저 나오는 구조”입니다. | 작업 스케줄러에서 다음에 수행해야 할 작업을 결정할 때 사용할 수 있습니다. |
LinkedList | 일반적인 큐를 구현하는데 사용하며 “먼저 들어온 요소가 먼저 나오는 구조(FIFO)”입니다. | 크기가 제한되지 않으므로, 크기가 고정되어 있지 않은 데이터를 다룰 때 유용합니다. |
ArrayBlockingQueue | 배열로 구현된 큐로 “크기가 고정”되어 있는 구조이다. 요소가 추가 될때 배열의 끝에 추가되며 더 이상 요소를 추가 할 수 없을때 대기열에 추가할 수 없는 구조를 가집니다. | 일시적으로 요청이 증가한 경우 빠른 응답을 보장하는 경우에 유용합니다. |
ConcurrentLinkedQueue | 여러 스레드에서 안전하게 사용할 수 있는 큐로 “비동기 적으로 요소를 추가하거나 제거” 할 수 있는 구조를 가집니다. | 멀티 스레드 환경에서 사용하는 것이 유용합니다. |
LinkedBlockingQueue | “크기가 제한되지 않은 큐”로 요소가 추가되거나 제거될 때 락이 걸리는 구조를 가집니다. | 멀티 스레드 환경에서 사용하는 것이 좋으며, 크기가 고정되어 있지 않은 데이터를 다룰 때 유용합니다. |
// Queue는 인터페이스, PriorityQueue는 인터페이스의 구현체
Queue<String> strPriorityQueue = new PriorityQueue<>();
// Queue는 인터페이스, LinkedList는 인터페이스의 구현체
Queue<String> strLinkedList = new LinkedList<>();
// Queue는 인터페이스, ArrayBlockingQueue는 인터페이스의 구현체
Queue<String> strArrBlockQueue = new ArrayBlockingQueue<>();
// Queue는 인터페이스, ConcurrentLinkedQueue는 인터페이스의 구현체
Queue<String> strCurrLinkedQueue = new ConcurrentLinkedQueue<>();
// Queue는 인터페이스, LinkedBlockingQueue는 인터페이스의 구현체
Queue<String> strLinkedBlockQueue = new LinkedBlockingQueue<>();
[참고] Queue의 인터페이스와 구현체에 대해 궁금하시면 아래의 글을 참고하면 도움이 됩니다.
2) Queue Class Method
💡 해당 API 문서는 Java 11 버전을 기준으로 요약 정리한 API Doucument입니다.
💡 "분류" 부분은 개인적인 기준으로 분류를 하였으니 참고하시면 도움이 될 것 같습니다.
1. 큐 주요 메서드
메서드 | 리턴 값 | 분류 | 예외 발생 여부 | 설명 |
element() | E | 큐 요소 조회 | O | 큐의 head(맨 앞)에 있는 요소를 반환합니다. 큐가 비어있는 경우 예외를 던집니다. |
peek() | E | 큐 요소 조회 | X | 큐의 head(맨 앞)에 있는 요소를 반환합니다. 큐가 비어있는 경우 null을 반환합니다. |
add(E e) | boolean | 큐 요소 추가 | O | 큐에 요소를 추가하고 성공적으로 추가되었는지 여부를 반환합니다. 큐가 제한된 용량을 가지는 경우 예외를 던집니다. |
offer(E e) | boolean | 큐 요소 추가 | X | 큐에 요소를 추가하고 성공적으로 추가되었는지 여부를 반환합니다. 큐가 제한된 용량을 가지는 경우 false를 반환합니다. |
remove() | E | 큐 요소 제거 | O | 큐의 head(맨 앞)에 있는 요소를 제거하고 반환합니다. 큐가 비어있는 경우 예외를 던집니다. |
poll() | E | 큐 요소 제거 | X | 큐의 head(맨 앞)에 있는 요소를 제거하고 반환합니다. 큐가 비어있는 경우 null을 반환합니다. |
💡 [참고] 큐에서 발생할 수 있는 예외 목록
- 특정 메서드 (element, add, remove)를 사용하는 경우 발생할 수 있는 예외이므로 각각에 대한 예외처리가 필요합니다.
메서드 | 예외 | 설명 |
element() | NoSuchElementException | - 큐가 비어 있을때 발생하는 에러 |
add(E e) | IllegalStateException | - 용량 제한으로 인해 지금 요소를 추가할 수 없는 경우 |
add(E e) | ClassCastException | - 지정된 요소의 클래스가 이 대기열에 추가할 수 없는 경우 |
add(E e) | NullPointerException | - 지정한 요소가 null이고 이 대기열에서 null 요소를 허용하지 않는 경우 |
add(E e) | IllegalArgumentException | - 이 요소의 일부 속성으로 인해 이 대기열에 추가할 수 없는 경우 |
remove() | NoSuchElementException | - 큐가 비어 있을때 발생하는 경우 |
2. java.util.Collection <E> 인터페이스 메서드
💡 Queue의 인터페이스 경우는 Collection <E>의 객체를 상속받아서 사용합니다. 그렇기에 Collection <E>에서 사용할 수 있는 메서드를 모두 사용이 가능합니다.
💡 java.util.Collection <E> 인터페이스?
- 인터페이스는 Java Collections Framework의 일부로서, 여러 객체를 모으는 컨테이너를 정의합니다. 이 인터페이스는 모든 Collection 클래스의 상위 인터페이스이며, List, Set, Queue 등 다양한 컬렉션 타입 구현에 사용됩니다.
메서드 | 리턴 타입 | 분류 | 설명 |
add(E e) | boolean | 컬렉션 요소 추가 | 지정된 요소를 이 컬렉션에 추가합니다. |
addAll(Collection<? extends E> c) | boolean | 컬렉션 요소 추가 | 지정된 컬렉션의 모든 요소를 이 컬렉션에 추가합니다. |
clear() | void | 컬렉션 요소 제거 | 이 컬렉션에서 모든 요소를 제거합니다. |
isEmpty() | boolean | 컬렉션 요소 조회 | 이 컬렉션에 요소가 하나도 포함되어 있지 않은 경우 true를 반환합니다. |
contains(Object o) | boolean | 컬렉션 요소 조회 | 이 컬렉션에 지정된 요소가 포함되어 있는 경우 true를 반환합니다. |
containsAll(Collection<?> c) | boolean | 컬렉션 요소 조회 | 이 컬렉션에 지정된 컬렉션의 모든 요소가 포함되어 있는 경우 true를 반환합니다. |
equals(Object o) | boolean | 컬렉션 요소 비교 | 지정된 개체와 이 컬렉션을 비교하여 동일한지 여부를 확인합니다. |
remove(Object o) | boolean | 컬렉션 요소 제거 | 지정된 요소의 단일 인스턴스를 이 컬렉션에서 제거합니다. |
removeAll(Collection<?> c) | boolean | 컬렉션 요소 제거 | 지정된 컬렉션에 포함된 이 컬렉션의 모든 요소를 제거합니다. |
removeIf(Predicate<? super E> filter) | boolean | 컬렉션 요소 제거 | 주어진 프레디케이트를 충족하는 이 컬렉션의 모든 요소를 제거합니다. |
retainAll(Collection<?> c) | boolean | 컬렉션 보존 | 지정된 컬렉션에 포함된 요소만 이 컬렉션에 보존합니다. |
iterator() | Iterator<E> | 컬렉션 순회 | 이 컬렉션의 요소를 반복하는 데 사용할 수 있는 반복자를 반환합니다. |
hashCode() | int | 컬렉션 변환 | 이 컬렉션에 대한 해시 코드 값으로 반환합니다. |
size() | int | 컬렉션 값 반환 | 이 컬렉션의 요소 수를 반환합니다. |
parallelStream() | Stream<E> | 켈력션 변환 | 이 컬렉션을 소스로 사용하는 가능성이 있는 parallel Stream을 반환합니다. |
spliterator() | Spliterator<E> | 컬렉션 변환 | 이 컬렉션의 요소에 대한 Spliterator를 만듭니다. |
stream() | Stream<E> | 컬렉션 변환 | 이 컬렉션을 소스로 사용하는 순차적 Stream을 반환합니다. |
toArray() | Object[] | 컬렉션 변환 | 이 컬렉션의 모든 요소를 포함하는 배열을 반환합니다. |
default <T> T[] toArray(IntFunction<T[]> generator) | T[] | 컬렉션 변환 | 반환된 배열을 할당하는 데 사용할 제네레이터 함수를 사용하여이 컬렉션의 모든 요소를 포함하는 배열을 반환합니다. |
<T> T[] toArray(T[] a) | T[] | 컬렉션 변환 | 지정된 배열의 형식으로 이 컬렉션의 모든 요소를 포함하는 배열을 반환합니다. |
오늘도 감사합니다. 😀
반응형
'Java > API Document' 카테고리의 다른 글
[Java/API] WebClient Method API Document : Java 11 (0) | 2023.08.14 |
---|---|
[Java/API] Priority Queue Method API Document : Java 11 (0) | 2023.07.20 |
[Java/API] Stack Method API Document : Java 11 (0) | 2023.07.08 |
[Java/API] HashMap Method API Document : Java 11 (0) | 2023.05.29 |
[Java/API] ArrayList Method API Document : Java 11 (0) | 2023.05.29 |