Stack & Queue JS 21.04.14
in Dev on Java Script
자료구조
여러 데이터(자료)들의 묶음을 어떻게 저장할 것이고, 사용할 것인지 정의한 것
Stack
데이터를 쌓는 자료 구조. 데이터의 입출(입구와 출구)이 하나인 제한적 접근. 때문에 가장 나중에 들어온 데이터가 가장 먼저 나갈수 있다. 이러한 자료구조의 정책을 LIFO(Last In First Out) 혹은 FILO(First In Last Out)
비유 : 다섯 대의 자동차(데이터)가 순서대로 골목(Stack 자료 구조)을 지나고 있습니다. 그러나 골목 끝은 막혀 있습니다. 첫 번째 자동차는 좌회전, 우회전을 할 수 있는 골목을 통과하기 위해 직진했습니다. 나머지 자동차들은 앞 자동차의 꽁무니를 따라갔습니다. 하지만 막다른 길을 맞이했고, 마지막으로 들어온 다섯번 째 자동차가 먼저 후진하여 나와야 하는 상황이 되었습니다.
사용 사례 : 홈페이지 뒤로가기 & 앞으로가기 기능
- 새로운 페이지로 접속할 때 현재 페이지를 Prev Stack에 보관합니다.
- 뒤로 가기 버튼을 눌러 이전 페이지로 돌아갈 때는 현재 페이지를 Next Stack에 보관하고 Prev Stack에 가장 나중에 보관된 페이지를 현재 페이로 가져옵니다.
- 앞으로 가기 버튼을 눌러 앞서 방문한 페이지로 이동을 원할 때는 Next Stack의 가장 마지막으로 보관된 페이지를 가져옵니다.
- 마지막으로 현재 페이지를 Prev Stack에 보관합니다.
Queue
Stack과 반대되는 개념. 먼저 들어간 자료(data)가 먼저 나오는 FIFO(First In First Out) 혹은 LILO(Last In Last Out) 의 특성
비유 : 자동차(데이터)는 톨게이트(Queue 자료 구조)에 진입한 순서대로 빠져나옵니다.
사용 사례 :
- 우리가 문서를 작성하고 출력 버튼을 누르면 해당 문서는 인쇄 작업 (임시 기억 장치)Queue에 들어갑니다.
- 프린터는 인쇄 작업 Queue로 들어온 순서대로 문서를 인쇄합니다.
컴퓨터 장치들 사이에서(위 예제에서는 컴퓨터와 프린터 사이) 자료(data)를 주고 받을 때 각 장치들 사이에 존재하는 속도의 차이나 시간 차이를 극복하기 위한 임시 기억 장치로 Queue가 사용됩니다. 이것을 통틀어 버퍼(buffer)라고 합니다. 아래 이미지는 버퍼링(buffering)의 개념을 보여주고 있습니다.
보통 프린터는 속도가 느리고, 상대적으로 CPU는 속도가 빠릅니다. CPU는 빠른 속도로 인쇄 자료(data)를 만든 다음, 인쇄 작업 Queue에 저장하고 다른 작업을 수행합니다. 프린터는 인쇄 작업 Queue에서 자료(data)를 가져가서 일정한 속도로 인쇄합니다.
다른 예로, 유튜브 시청을 할 때의 버퍼링은 다운로드 된 자료(data)가 영상을 재생하기에 충분하지 않다면 순서대로 Queue에 모아 두었다가 충분한 양이 되었을 때 비디오를 복원하여 재생합니다.