728x90
반응형
ADT(abstract data type)
- 추상자료형
- 개념적으로 어떤 동작이 있는지만 정의
- 구현에 대해서는 다루지 않음
DS(data structure)
- 자료구조
- ADT에서 정의된 동작을 실제로 구현한 것
스택(stack)
- LIFO(Last In First Out) 형태로 데이터를 저장하는 구조
스택 주요 동작
- push
- 아이템을 넣는 작업
- pop
- 아이템을 빼내는 작업
- peek
- 최상단 아이템을 무엇인지 알수있는
큐(queue)
- FIFO(First In First Out) 형태로 데이터를 저장하는 구조
큐 주요 동작
- enqueue
- 값을 넣는 동작
- dequeue
- 값을 꺼내는 동작
- peek
- 꺼내지는 않지만 곧 꺼내게되는 값을 알 수 있는
스택 사용 사례
stack memory & stack frame
- 함수가 호출될 때마다 스택 프레임이 쌓이고, 함수가 사라지면 그에 해당하는 함수의 스택 프레임도 같이 스택 메모리 영역에서 사라진다.
큐 사용 사례
producer/consumer architecture
- producer가 아이템을 큐에 넣으면 consumer는 들어온 순서대로 빼낸다.
큐는 항상 FIFO를 의미하지는 않는다. 우선순위 큐에서는 우선순위가 큰것이 먼저 빠져나간다.
스택/큐 관련 에러와 해결 방법
StackOverflowError
- 스택 메모리 공간을 다 썼을 때 발생하는 에러
- 대부분 재귀함수에서 탈출 못해서 발생
- 해결방안은 탈출조건을 잘 써주면 된다.
OutOfMemoryError
- Java의 힙 메모리를 다 썼을 때 발생
- 큐에 데이터가 계속 쌓이기만 한다면 발생
- 해결방안은 큐 사이즈를 고정한다.
- 만약 큐의 공간이 다 찼을 때 해결방안
- 예외 던지기
- 특별한 값(null or false)을 반환
- 성공할 때까지 영원히 스레드 블락(block)
- 제한된 시간만 블락되고 그래도 안되면 포기
- 위의 4가지를 구현한 큐가 LinkedBlockingQueue이다.
728x90
반응형
'영상 후기 > 데이터구조' 카테고리의 다른 글
영상 후기 - 우선순위 큐와 힙의 개념과 차이, 사용 사례를 설명합니다! 힙이 어떻게 동작하는지도 예를 통해 자세히 설명합니다! (0) | 2023.03.31 |
---|