Abstract Data Type과 Data Structure
ADT(Abstract Data Type)
- 추상자료형
- 개념적으로 어떤 동작이 있는지만 정의
- 구현에 대해서는 다루지 않음
DS (Data Structure)
- 자료구조
- ADT에서 정의된 동작을 실제로 다룸
이 영상은 stack과 queue를 ADT의 관점에서 다룸. stack과 queue의 구현을 설명하지는 않음.
스택과 큐의 개념 설명
스택
- LIFO(Last In First Out) 형태로 데이터를 저장하는 구조
- 스택의 주요동작 push, pop, peek

큐
- FIFO(First In First Out) 형태로 데이터를 저장하는 구조
- 큐의 주요동작 enqueue, dequeue, peek

스택과 큐의 사용사례
스택 사용 사례 : stack memory & stack frame

큐 사용 사례 : producer/consumer architecture

기술 문서에서 큐를 만났을 때 팁
- 항상 FIFO를 의미하지는 않음 (대기 공간의 의미로 사용되는 경유도 있음)
스택/큐 관련 에러와 해결방법
StackOverflowError
- 스택 메모리 공간을 다 썼을 때 발생하는 에러
- 재귀함수(recursive function)에서 탈출 못해서 발생
- 예시) 피보나치 함수
OutOfMemoryError
- Java의 힙(Heap) 메모리를 다 썼을 때 발생
- 큐에 데이터가 계속 쌓이기만 한다면 발생
- 해결방법 : 큐 사이즈를 고정
- 큐가 다 찼을 때 해결방법
- 예외(exception) 던지기
- 특별한 값(null or false)을 반환
- 성공할 때까지 영원히 스레드 블락(block)
- 제한된 시간만 블락되고 그래도 안되면 푁
LinkedBlockingQueue
