ADT(Abstract Data Type) vs DS(Data structure)
- 'ADT'는 추상 자료형을 의미하며 개념적으로 어떤 동작이 있는지만 정의하고, 구현에 대해서는 다루지 않는다.
- 'DS'는 자료구조로, 'ADT'에서 정의된 동작을 실제로 구현한 것
- Stack과 Queue는 'ADT'를 실제로 구현한 자료 구조이다.
스택(Stack)과 큐(Queue)
- 스택은 'Last-In-First-Out' 형태로 데이터를 저장하는 구조
- 데이터를 삽입하는 'push', 데이터를 뽑아내고 삭제하는 'pop', 가장 마지막에 들어온 요소를 추출하는 'peek'과 같은 동작이 있다.
- Queue는 'First-In-First-Out' 형태로 데이터를 저장하는 구조이며, 데이터를 삽입하는 'enqueue', 추출하는 'dequeue' 동작이 있다.
- Queue라는 항상 'FIFO'를 의미하진 않는다. OS(Operating System)에서 멀티태스킹을 할 때 사용되는 '레디 큐(Ready Queue)'와 '오퍼스 트윈 폴스(Operating System Twins Pulse)' 등 다양한 대기열을 의미하는 것으로, 역할에 따라 상이한 용어가 사용된다.
스택(Stack)의 사용 사례
Stack Memory
Stack Memory라는 메모리 영역으로, 함수가 호출될 때 Stack Frame이 쌓이고, 종료될 때 Stack Frame이 사라지는 구조로 동작한다.
자바 개발 시 스택 오버플로(Stack Overflow) 같은 에러가 발생할 수 있는데, 이는 스택 메모리 공간이 다 차서 발생하는 에러다. 보통 재귀함수에서 탈출을 못할때 발생하는 경우가 많다.
큐(Queue)의 사용 사례
Producer/Consumer Architecture
프로듀서가 생산한 아이템이 차례대로 큐에 쌓이고 도착 순서에 따라 처리된다.
Heap memory
힙 메모리(Heap memory)는 주로 객체를 저장하는 메모리 영역인데, OutOfMemoryError
는 힙 메모리가 다 채워진 상태에서 메모리를 더 필요로 할 때 발생한다.
따라서 Queue 사이즈를 고정하여 메모리 사용을 제한하는 것이 중요하다.OutOfMemoryError
가 발생할 경우 대응할 수 있는 4가지 방식이 있다.
- Exception 던지기
- 특별한 값(Null or false)을 반환
- 성공할 때까지 영원히 스레드 블락(block)
- 제한된 시간만 블락되고 그래도 안되면 포기
이러한 4가지 방식을 구현한 Queue 클래스는 Java에서 LinkedBlockingQueue가 있다.
참고
'ComputerScience > DataStructure' 카테고리의 다른 글
[DataStructure] Java에서 Linked List는 Queue와 List를 모두 사용할 수 있다. + (Iterable, Collection, List, Queue ... 요약) (0) | 2024.06.28 |
---|---|
[DataStructure] Map과 Hash Table (1) | 2024.03.13 |
[DataStructure] Array, List와 Array List, Linked List (0) | 2024.03.12 |
[DataStructure] Array, Dynamic Array, Associative Array (0) | 2024.03.11 |
[DataStructure] 우선순위 큐(Priority Queue)와 힙(Heap)의 차이 (2) | 2024.03.07 |