본문 바로가기
영상 후기/데이터구조

영상 후기 - 스택과 큐 설명! 참 쉽죠~~? 기술 문서 읽다가 큐 만났을 때 팁과 스택/큐와 관련된 에러들 그리고 해결책도 설명드려요!!

by 올리브영 2023. 3. 31.
728x90
반응형

movie

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
반응형