반응형
해당 글에서는 컬렉션 프레임워크(Collection Framework)내에서 사용되는 인터페이스와 이를 구현하는 구현체 간의 관계를 이해하기 위한 목적으로 작성한 글입니다.
💡 이전 Collection Framework로 List, Map, Set 작성한 글에 대해 궁금하시다면 아래의 링크를 참조하시면 도움이 됩니다.
1) 요약
클래스 | 분류 | 설명 |
Queue | 인터페이스 | 데이터를 일시적으로 쌓아두기 위한 자료구조 중 하나로 선입선출(FIFO, First-In-First-Out)의 특성으로 가장 먼저 추가된 데이터가 가장 먼저 삭제되는 구조입니다. |
PriorityQueue | Queue 인터페이스의 구현체 | 우선순위 큐를 구현하는데 사용하며 “우선순위가 높은 요소가 먼저 나오는 구조”입니다. |
LinkedList | Queue 인터페이스의 구현체 | 일반적인 큐를 구현하는데 사용하며 “먼저 들어온 요소가 먼저 나오는 구조(FIFO)”입니다. |
ArrayBlockingQueue | Queue 인터페이스의 구현체 | 배열로 구현된 큐로 “크기가 고정”되어 있는 구조이다. 요소가 추가 될때 배열의 끝에 추가되며 더 이상 요소를 추가 할 수 없을때 대기열에 추가할 수 없는 구조를 가집니다. |
ConcurrentLinkedQueue | Queue 인터페이스의 구현체 | 여러 스레드에서 안전하게 사용할 수 있는 큐로 “비동기 적으로 요소를 추가하거나 제거” 할 수 있는 구조를 가집니다. |
LinkedBlockingQueue | Queue 인터페이스의 구현체 | “크기가 제한되지 않은 큐”로 요소가 추가되거나 제거될 때 락이 걸리는 구조를 가집니다. |
Stack | 인터페이스 | 데이터를 일시적으로 쌓아두기 위한 자료구조 중 하나로, 후입선출(LIFO, Last-In-First-Out)의 특성으로 가장 마지막에 추가된 데이터가 가장 먼저 삭제되는 구조 |
Deque | 인터페이스 | 양쪽 긑에서 삽입과 삭제가 가능한 자료구조 중 하나로 선입선출(FIFO), 후입선출(LIFO) 개념이 모두 적용되는 구조 |
ArrayDeque | Deque 인터페이스의 구현체 | 스택으로 사용할 수 있는 덱(Double Ended Queue) 구조이다. 배열을 이용하여 구현되며, 크기가 제한되어 있지 않다. |
LinkedBlockingDeque | Deque 인터페이스의 구현체 | 연결 리스트를 이용하여 구현된 스택 클래스이다. 크기가 제한되어 있지 않으며, 스택으로도 사용할 수 있고, 큐로도 사용할 수 있다. |
[참고] 컬렉션 프레임워크(Collection Framework)의 선형 구조에 대한 이론에 대해 자세히 알고 싶으시면 이전에 작성한 글을 참고하시면 됩니다.
2) 큐(Queue) 인터페이스를 기반으로 하는 클래스들
💡 큐는 데이터를 일시적으로 쌓아두기 위한 자료구조 중 하나로 선입선출(FIFO, First-In-First-Out)의 특성으로 가장 먼저 추가된 데이터가 가장 먼저 삭제되는 구조를 가집니다.
💡 Queue의 경우 인터페이스이며 PriorityQueue, LinkedList, 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<>();
구현 클래스 | 설명 | 특징 |
PriorityQueue | 우선순위 큐를 구현하는데 사용하며 “우선순위가 높은 요소가 먼저 나오는 구조”입니다. | 작업 스케줄러에서 다음에 수행해야 할 작업을 결정할 때 사용할 수 있습니다. |
LinkedList | 일반적인 큐를 구현하는데 사용하며 “먼저 들어온 요소가 먼저 나오는 구조(FIFO)”입니다. | 크기가 제한되지 않으므로, 크기가 고정되어 있지 않은 데이터를 다룰 때 유용합니다. |
ArrayBlockingQueue | 배열로 구현된 큐로 “크기가 고정”되어 있는 구조이다. 요소가 추가 될때 배열의 끝에 추가되며 더 이상 요소를 추가 할 수 없을때 대기열에 추가할 수 없는 구조를 가집니다. | 일시적으로 요청이 증가한 경우 빠른 응답을 보장하는 경우에 유용합니다. |
ConcurrentLinkedQueue | 여러 스레드에서 안전하게 사용할 수 있는 큐로 “비동기 적으로 요소를 추가하거나 제거” 할 수 있는 구조를 가집니다. | 멀티 스레드 환경에서 사용하는 것이 유용합니다. |
LinkedBlockingQueue | “크기가 제한되지 않은 큐”로 요소가 추가되거나 제거될 때 락이 걸리는 구조를 가집니다. | 멀티 스레드 환경에서 사용하는 것이 좋으며, 크기가 고정되어 있지 않은 데이터를 다룰 때 유용합니다. |
3) Stack 인터페이스를 기반으로 하는 클래스들
💡 스택은 데이터를 일시적으로 쌓아두기 위한 자료구조 중 하나로 후입선출(LIFO, Last-In-First-Out)의 특성으로 가장 마지막에 추가된 데이터가 가장 먼저 삭제되는 구조를 가집니다.
💡 Stack의 경우 인터페이스이며 Stack, ArrayDeque, LinkedBlockingDeque의 경우 인터페이스를 구현하는 클래스입니다.
// Stack은 인터페이스, Stack은 인터페이스의 구현체
Stack<String> strStack = new Stack<>();
구현 클래스 | 설명 | 사용 예시 |
Stack | 가장 기본적인 스택 구현 클래스로 배열을 이용하여 구현되는 구조입니다 | 수식의 후위 표기법 계산 등에 사용됩니다. |
4) Deque 인터페이스를 기반으로 하는 클래스들
💡 덱은 양쪽 끝에서 삽입과 삭제가 가능한 자료구조 중 하나로 선입선출(FIFO), 후입선출(LIFO) 개념이 모두 적용되는 구조를 가집니다.
💡 Deque의 경우 인터페이스며 ArrayDeque, LinkedBlockingDeque의 경우 인터페이스를 구현하는 클래스입니다.
// Deque은 인터페이스, ArrayDeque은 인터페이스의 구현체
Deque<String> strArrDeque = new ArrayDeque<>();
// Deque은 인터페이스, LinkedBlockingDeque은 인터페이스의 구현체
Deque<String> strLinkedBlockQueue = new LinkedBlockingDeque<>();
구현 클래스 | 특징 | 사용예시 |
ArrayDeque | 스택으로 사용할 수 있는 덱(Double Ended Queue) 구조이다. 배열을 이용하여 구현되며, 크기가 제한되어 있지 않습니다. | 스택으로 사용할 수 있으며, 큐로도 사용할 수 있습니다. |
LinkedBlockingDeque | 연결 리스트를 이용하여 구현된 스택 클래스이다. 크기가 제한되어 있지 않으며, 스택으로도 사용할 수 있고, 큐로도 사용할 수 있습니다. | 멀티 스레드 환경에서 사용하는 것이 좋으며, 크기가 고정되어 있지 않은 데이터를 다룰 때 유용합니다. |
오늘도 감사합니다. 😀
반응형
'Java > 이론 및 문법' 카테고리의 다른 글
[Java] JDK(Java Development Kit), Open JDK 이해하기 (0) | 2023.06.25 |
---|---|
[Java] UUID 이해 및 사용방법 (0) | 2023.03.09 |
[Java] Collection Framework(List, Map, Set)의 인터페이스와 구현체 이해하기 - 1 : 정의 및 예시 (0) | 2023.03.06 |
[Java] 자료형(Data Type) 이해하기 : 기본 / 참조 자료형, 래퍼 클래스 (0) | 2023.02.21 |
[Java] 정규표현식(RegExp) 이해하기 : 패턴, 문자 클래스, 자주 사용 패턴 (2) | 2023.01.23 |