자료구조란 여러 데이터들의 묶음을 저장하고, 사용하는 방법을 정의한 것이다.
데이터는 문자, 숫자, 소리, 그림, 영상 등 실생활을 구성하고 있는 모든 '값'이다.
우리의 이름, 나이, 키, 주소, 목소리 까지 데이터로 분류할 수 있다.
그러나 데이터는 그 자체만으로 어떤 정보를 가지기 힘들다. 예를 들어 '나이'라는 데이터만 알고 있다면, 사람의 나이인지, 강아지의 나이인지, 나무의 나이인지 알 수가 없다.
이처럼 데이터는 분석하고 정리하여 활용해야만 의미를 가질 수 있다.
데이터를 정해진 규칙없이 저장하거나, 하나의 구조로만 정리하고 활용하는 것보다 데이터를 체계적으로 정리하여 저장해두는 것이, 데이터를 활용하는 데 있어 훨씬 유리하다.
데이터를 효율적으로 다룰 수 있는 방법을 모아, 자료구조라는 이름을 붙였다. 자료구조의 수많은 방법 중 가장 많이 쓰이는 Stack, Queue, Tree, Graph 에 대해 정리해보자.
Stack은 말그대로 '쌓다','포개지다' 라는 뜻을 가진 Data를 순서대로 쌓는 자료구조 이다.
일상 생활에서 Stack과 비슷한 예는 아래와 같다.
다섯 대의 자동차가 순서대로 좁은 골목을 지나고 있습니다.
좁은 골목에 진입한 차량은 곧 맞이할 미래를 모르고 있지만,
이 골목의 끝은 막혀 있습니다.
첫 번째 자동차는 이 골목을 통과하기 위해 직진했고,
나머지 자동차도 앞 자동차의 꽁무니를 따라 직진했습니다. 그러나 첫 번째 차량이 막다른 길을 맞이했습니다.
마지막으로 들어온 다섯번 째 자동차가 먼저 후진하여 나와야 하는 상황이 되어버린 겁니다.
이런 상황일때 골목을 Stack, 자동차를 Data라고 할 수 있다.
위의 예시에서와 같이, 가장 먼저 들어간 자동차는 가장 나중에 나올 수 있다.
입력과 출력이 하나의 방향으로 이루어지는 제한적 접근. 이것이 자료구조 Stack의 특징이다.
이러한 자료구조의 정책을 LIFO(Last In First Out), FILO(First In Last Out) 이라고 부르기도한다.
컴퓨터에서 자료구조 Stack은 어떤 곳에 사용되고 있을까. 대표적으로 우리가 자주 사용하는 브라우저의 뒤로 가기, 앞으로 가기 기능을 구현할 때 자료구조 Stack이 활용된다.
브라우저에서 자료구조 Stack이 사용될 때에는 다음과 같은 순서를 거친다.
이렇게 자료구조 Stack을 이용하면, 뒤로 가기와 앞으로 가기 버튼을 구현할 수 있다.