쌓기와 줄서기, 스택과 큐
접시를 차곡차곡 쌓으면 어느 것부터 꺼내나요? 맨 위, 곧 마지막에 올린 것부터죠. 줄을 서면 누가 먼저 들어가나요? 맨 앞, 곧 먼저 온 사람이죠. 자료를 다루는 방법에도 이 두 가지가 그대로 있어요. 쌓기는 스택, 줄서기는 큐예요.
접시처럼 쌓아요, 스택
앞에서 자료를 줄지어
늘어놓는 법을 배웠어요.
이번엔 늘어놓는 대신
위로 차곡차곡 쌓아 볼게요.
접시를 쌓는 모습을 떠올려요.
새 접시는 늘 맨 위에 올리고,
꺼낼 때도 맨 위부터 꺼내죠.
그러니 마지막에 올린 접시가
가장 먼저 손에 잡혀요.
접시를 눌러 위로 쌓고, 꺼내기를 눌러 봐요. 늘 맨 위, 곧 마지막에 올린 것부터 나와요.
꺼낼 때마다
방금 올린 것이 먼저 나왔죠.
나중에 넣은 게 먼저 나온다,
이게 스택의 한 가지 약속이에요.
넣는 곳도 빼는 곳도
오직 맨 위 한 군데뿐이라
규칙이 아주 단순해요.
이 단순함이 어디에 쓸모가 있는지는
조금 뒤에 다시 만나요.
줄을 서요, 큐
이번엔 쌓는 대신
옆으로 줄을 세워 볼게요.
버스를 기다리는 줄을 떠올려요.
새로 온 사람은 맨 뒤에 서고,
버스가 오면 맨 앞부터 타죠.
그러니 먼저 온 사람이
먼저 들어가게 돼요.
쌓기와는 정반대네요.
이 줄서기를 큐라고 불러요.
사람을 눌러 줄 맨 뒤에 세우고, 내보내기를 눌러 봐요. 늘 맨 앞, 곧 먼저 온 사람부터 나가요.
내보낼 때마다
가장 오래 기다린 사람이 먼저 나갔죠.
먼저 넣은 게 먼저 나온다,
이게 큐의 약속이에요.
뒤로 들어와서 앞으로 나가니
들어온 순서가 그대로 지켜져요.
그래서 새치기 없이
공평한 차례가 보장돼요.
쌓기는 나중먼저, 줄서기는 먼저먼저예요.
스택은 되돌리기에 써요
글을 쓰다 실수했을 때
되돌리기를 누르면
방금 한 일이 먼저 취소되죠.
그 전에 한 일은 그 다음에 취소되고요.
동작을 차례로 쌓아 두었다가
맨 위, 곧 마지막 동작부터
하나씩 꺼내 취소하는 거예요.
바로 스택이죠.
뒤로가기 버튼도 똑같은 원리예요.
동작을 눌러 쌓고, 되돌리기를 눌러 봐요. 마지막에 한 동작부터 차례로 취소돼요.
되돌리기를 누를 때마다
가장 최근 동작부터 사라졌죠.
순서를 거꾸로 되감아야 할 땐
스택만큼 잘 맞는 게 없어요.
마지막에 넣은 걸 먼저 꺼낸다는
그 약속이 곧 되감기니까요.
그럼 순서를 거꾸로가 아니라
들어온 그대로 지켜야 할 땐
무엇을 쓰면 좋을까요?
큐는 대기열에 써요
여러 사람이 한 프린터에
인쇄를 맡기면 어떻게 될까요?
먼저 보낸 문서가 먼저 인쇄되고
나중에 보낸 건 뒤에서 기다려요.
이게 인쇄 대기열이에요.
은행 번호표도 마찬가지죠.
먼저 뽑은 번호가 먼저 불려요.
들어온 순서대로 공평하게.
바로 큐가 하는 일이에요.
문서를 눌러 인쇄 대기열에 넣고, 인쇄를 눌러 봐요. 먼저 맡긴 것부터 차례로 처리돼요.
인쇄를 누를 때마다
가장 먼저 맡긴 문서가 나왔죠.
순서를 그대로 지켜야 할 땐
큐만 한 게 없어요.
먼저 넣은 걸 먼저 꺼낸다는
그 약속이 곧 공평함이니까요.
같은 자료라도 꺼내는 규칙 하나로
쓰임새가 이렇게 달라져요.
이제 둘을 나란히 정리해봐요.
정리해볼까요
한 줄로 모으면 이래요.
스택은 접시 쌓기, 나중에 넣은 게 먼저 나와요.
큐는 줄서기, 먼저 넣은 게 먼저 나와요.
되돌리기와 뒤로가기는 스택,
대기열과 번호표는 큐예요.
넣고 빼는 규칙 하나가
쓰임새를 정하는 거죠.
쌓기는 나중먼저, 줄서기는 먼저먼저,
이 한 줄만 챙기면 돼요.
핵심을 차례로 눌러 되짚어봐요. (쌓기 스택 → 줄서기 큐 → 스택은 되돌리기 → 큐는 대기열)
이제 자료를 쌓고 줄 세우는
두 가지 방법을 알게 됐어요.
넣는 곳과 빼는 곳을 정하는 것만으로
전혀 다른 도구가 되었죠.
다음엔 줄도 쌓기도 아닌
또 다른 방법을 만나요.
자료가 가지처럼 갈라지며
위에서 아래로 뻗어 나가는 모양,
그 이야기를 다음 강에서 이어가봐요.