스택과 큐

조현재·2023년 2월 15일
0

데이터구조

목록 보기
1/2

ADT(abstract data type)

-추상자료형
-개념적으로 어떤 동작이 있는지만 정의
-구현에 대해서는 다루지 않음

DS(data structure)

-자료구조
-ADT에서 정의된 동작을 실제로 구현한 것

스택(stack)

LIFO(Last In First Out) 형태로 데이터를 저장하는 구조
-push : 넣기
-pop : 빼내기
-peek : 아이템을 빼내지는 않지만 가장 최상단에 있는게 뭔지 알 수 있는거

사용사례 : stack memory & stack frame

큐(queue)

FIFO(First In First Out) 형태로 데이터를 저장하는 구조
-enqueue : 큐에 아이템 넣기
-dequeue : 큐에서 아이템 빼기
-peek : 아이템을 빼내지는 않지만 아이템의 값을 알 수 있는거

사용사례 : producer / consumer architecture
※항상 FIFO를 의미하지는 않는다.
문서를 잘 보고 파악해야한다. 뭔가를 저장하고 있는 대기열같은 느낌일 수도 있음

Error

StackOverflowError

스택 메모리 공간을 다 썼을 때 발생하는 에러
-재귀함수(recursive function)에서 탈출 못해서 발생(탈출 조건을 안 썼을 경우)

def recur_fibo(n):
	if n <=1:
    	return n
    else:
    	return(recur_fibo(n-1) + recur_fibo(n-2))

OutOfMemoryError

Java의 힙(heap) 메모리를 다 썻을 때 발생
-heap: 객체가 거주하는 메모리 영역
큐에 데이터가 계속 쌓이기만 해서 메모리를 다 잡아먹을 경우
이를 해결하기 위해서는 큐 사이즈를 조정

큐가 다 찼을 때는 어떻게 해야할까?
-예외(exception) 던지기
-특별한 값(null or false)을 반환
-성공할 때까지 영원히 스레드 블락(block)
-제한된 시간만 블락되고 그래도 안되면 포기

실제로 java에서 이런 4가지 방식을 구현한 몇몇 클래스들이 있는데
그 중 하나가 LinkedBlockingQueue

profile
내일이 다른

0개의 댓글