본문 바로가기

CS 과목(CS科目)/자료 구조(Data Structure)

Stack vs Queue(dequeue) 사용이 적절할 때 or 관련 에러(in JAVA)

Stack : 가장 최근의 데이터가 필요할 떄!

Queue(dequeue) : 1.가장 이전의 데이터가 필요할 때!

                                2.무언가를 대기시키고 싶을 때!(ex. Ready Queue, Waiting Queue)

(아래는 JAVA를 기준으로 설명을 하였다.)

Stack과 관련된 에러

1. stackoverflow : 할당된 스택 메모리가 다 찼을 떄!!

-> 거의 대부분 재귀함수 떄문에 발생

 

Queue와 관련된 에러

1. OutOfMemory

-> JAVA에서 Heap 메모리를 다 썼을 때 발생

-> Queue에 데이터가 쌓이기만 해서, heap 메모리를 다 잡아 먹어 버리면 발생

Solution : Queue의 사이즈를 고정시킨다. 

Q. 그럼 고정된 사이즈가 다 찼을 때는 어떻게 처리를 해 줘야 할까?

A.1. 예외(Exception) 던져서 실행의 흐름을 바꿈.2. null, false와 같은 특별한 값을 던져서 감지.3. Queue에 빈 공간이 생길 떄까지, 해당 스레드를 block시킨다.( 해당 스레드는 waiting 상태가 되므로, 시간을 낭비하는 issue가 생긴다.)4. Queue에 빈 공간이 생길 때까지 무작정 block을 시키는 것이 아니라, block에 timeout을 설정하고 timeout이 지났음에도 빈 공간이 생기지 않는다면, 걍 포기!!

 

JAVA에서는 위 1~4를 모두 사용할 수 있도록, LinkedBlockingQueue라는 Class가 구현이 되어 있다.

JAVA API 문서