-추상자료형
-개념적으로 어떤 동작이 있는지만 정의
-구현에 대해서는 다루지 않음
-자료구조
-ADT에서 정의된 동작을 실제로 구현한 것
LIFO(Last In First Out) 형태로 데이터를 저장하는 구조
-push : 넣기
-pop : 빼내기
-peek : 아이템을 빼내지는 않지만 가장 최상단에 있는게 뭔지 알 수 있는거
사용사례 : stack memory & stack frame
FIFO(First In First Out) 형태로 데이터를 저장하는 구조
-enqueue : 큐에 아이템 넣기
-dequeue : 큐에서 아이템 빼기
-peek : 아이템을 빼내지는 않지만 아이템의 값을 알 수 있는거
사용사례 : producer / consumer architecture
※항상 FIFO를 의미하지는 않는다.
문서를 잘 보고 파악해야한다. 뭔가를 저장하고 있는 대기열같은 느낌일 수도 있음
스택 메모리 공간을 다 썼을 때 발생하는 에러
-재귀함수(recursive function)에서 탈출 못해서 발생(탈출 조건을 안 썼을 경우)
def recur_fibo(n):
if n <=1:
return n
else:
return(recur_fibo(n-1) + recur_fibo(n-2))
Java의 힙(heap) 메모리를 다 썻을 때 발생
-heap: 객체가 거주하는 메모리 영역
큐에 데이터가 계속 쌓이기만 해서 메모리를 다 잡아먹을 경우
이를 해결하기 위해서는 큐 사이즈를 조정
큐가 다 찼을 때는 어떻게 해야할까?
-예외(exception) 던지기
-특별한 값(null or false)을 반환
-성공할 때까지 영원히 스레드 블락(block)
-제한된 시간만 블락되고 그래도 안되면 포기
실제로 java에서 이런 4가지 방식을 구현한 몇몇 클래스들이 있는데
그 중 하나가 LinkedBlockingQueue