Java/이론 및 문법

[Java] Collection Framework(Queue, Stack, Deque)의 인터페이스와 구현체 이해하기 -2 : 정의 및 예시

adjh54 2023. 3. 8. 20:17
728x170
해당 글에서는 컬렉션 프레임워크(Collection Framework)내에서 사용되는 인터페이스와 이를 구현하는 구현체 간의 관계를 이해하기 위한 목적으로 작성한 글입니다.


 
 

💡 이전 Collection Framework로 List, Map, Set 작성한 글에 대해 궁금하시다면 아래의 링크를 참조하시면 도움이 됩니다.

[Java] Collection Framework(List, Map, Set)의 인터페이스와 구현체 이해하기 - 1 : 정의 및 예시

해당 글에서는 컬렉션 프레임워크(Collection Framework)내에서 사용되는 인터페이스와 이를 구현하는 구현체 간의 관계를 이해하기 위한 목적으로 작성한 글입니다. 1) 요약 클래스 분류 설명 Map 인

adjh54.tistory.com

 
 

1) 요약


클래스분류설명
Queue인터페이스데이터를 일시적으로 쌓아두기 위한 자료구조 중 하나로 선입선출(FIFO, First-In-First-Out)의 특성으로 가장 먼저 추가된 데이터가 가장 먼저 삭제되는 구조입니다.
PriorityQueueQueue 인터페이스의 구현체우선순위 큐를 구현하는데 사용하며 “우선순위가 높은 요소가 먼저 나오는 구조”입니다.
LinkedListQueue 인터페이스의 구현체일반적인 큐를 구현하는데 사용하며 “먼저 들어온 요소가 먼저 나오는 구조(FIFO)”입니다.
ArrayBlockingQueueQueue 인터페이스의 구현체배열로 구현된 큐로 “크기가 고정”되어 있는 구조이다. 요소가 추가 될때 배열의 끝에 추가되며 더 이상 요소를 추가 할 수 없을때 대기열에 추가할 수 없는 구조를 가집니다.
ConcurrentLinkedQueueQueue 인터페이스의 구현체여러 스레드에서 안전하게 사용할 수 있는 큐로 “비동기 적으로 요소를 추가하거나 제거” 할 수 있는 구조를 가집니다.
LinkedBlockingQueueQueue 인터페이스의 구현체“크기가 제한되지 않은 큐”로 요소가 추가되거나 제거될 때 락이 걸리는 구조를 가집니다.
   
Stack인터페이스데이터를 일시적으로 쌓아두기 위한 자료구조 중 하나로, 후입선출(LIFO, Last-In-First-Out)의 특성으로 가장 마지막에 추가된 데이터가 가장 먼저 삭제되는 구조
   
Deque인터페이스양쪽 긑에서 삽입과 삭제가 가능한 자료구조 중 하나로 선입선출(FIFO), 후입선출(LIFO) 개념이 모두 적용되는 구조
ArrayDequeDeque 인터페이스의 구현체스택으로 사용할 수 있는 덱(Double Ended Queue) 구조이다. 배열을 이용하여 구현되며, 크기가 제한되어 있지 않다.
LinkedBlockingDequeDeque 인터페이스의 구현체연결 리스트를 이용하여 구현된 스택 클래스이다. 크기가 제한되어 있지 않으며, 스택으로도 사용할 수 있고, 큐로도 사용할 수 있다.

 

[참고] 컬렉션 프레임워크(Collection Framework)의 선형 구조에 대한 이론에 대해 자세히 알고 싶으시면 이전에 작성한 글을 참고하시면 됩니다.

[Java/자료구조론] 선형구조 이해하기 : 큐(Queue), 스텍(Stack), 덱(Deque)

해당 글에서는 자료구조론 중 선형 구조인 큐(Queue)와 스택(Stack), 덱(Deque)에 대해서 이해하고 언제 사용하며 각각의 장단점이 무엇인지에 대해 알아보기 위한 글입니다. 1) 선형 구조(Linear) 💡 선

adjh54.tistory.com

 
 
 
 

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연결 리스트를 이용하여 구현된 스택 클래스이다. 크기가 제한되어 있지 않으며, 스택으로도 사용할 수 있고, 큐로도 사용할 수 있습니다.멀티 스레드 환경에서 사용하는 것이 좋으며, 크기가 고정되어 있지 않은 데이터를 다룰 때 유용합니다.

 
 
 
 
 
오늘도 감사합니다. 😀
 
 
 
 

그리드형