본문 바로가기
C and C++

Stack(스택)이란?

by Henry Cho 2020. 4. 30.
728x90

Stack


stack(스택)이 무엇인지에 대해서 배우기 전에 제가 항상 하는 일이 있습니다.

바로 사전에서 단어의 뜻을 살펴보는 것이죠!

stack을 사전에서 찾아보면 "쌓여있다", "무더기", "쌓아서 채워놓다" 등의 의미를 확인할 수 있습니다.

따라서 C++에서의 stack도 무언가 쌓여 있는 것을 뜻한다는 걸 유추해볼 수 있습니다.

stack은 일반적으로 물건이 쌓여있는 모습보다는 다소 정돈된 느낌을 주는 단어입니다.

물건이 엉망진창으로 쌓여있다긴 보다는 차곡차곡 쌓여있다거나 깔끔하게 쌓아놓는 느낌이죠.

 

이렇게 책을 차곡차곡 쌓는 느낌을 stack이라고 표현할 수 있습니다.

C++에서 stack도 단어의 뜻과 비슷한 역할을 하고 있는데,

그림에서처럼 책을 쌓는게 아니라 데이터를 차곡차곡 쌓는다고 생각하시면 됩니다. 

 

LIFO


Stack은 Container Adaptor 타입의 한 종류로써 LIFO 타입을 가지고 있다고도 합니다.

LIFO란, Last in First Out의 줄임말로,

마지막으로 들어간 데이터가 제일 먼저 나온다는 의미처럼

Stack에서 마지막에 들어간 데이터가 제일 먼저 삭제가 됩니다. 

위의 쌓여있는 책과 같이 제일 위에 있는 책은 마지막에 올려진 책이지만,

위에 있다보니 제일 먼저 누군가에 의해 가져 가질 수 있습니다.

bro, 그러면 LIFO 말고 다른 방식도 있어?

네 있습니다.

stack은 Container Adaptor의 한 종류일 뿐

다른 종류의 function을 라이브러리에서 가져다 상황에 맞게 사용할 수 있습니다.

Container Adaptor로는 stack, queue, priority_queue가 있습니다.

 

Container Adaptor


Container Adaptor라고도 하고 Container Adapter라고도 합니다.

둘 다 같은 걸 의미하기 때문에 신경 쓰지 않으셔도 됩니다.

Container Adaptor는 연속된 데이터를 조정할 때 사용하는 기능이라고 보시면 됩니다. 

형 무슨 말인지 모르겠어.

Container에 대해서 사전에서 찾아보면 "용기", "그릇"이라는 뜻이 나오는데

제일 친근하게 다가오는 뜻은 바로 컨테이너입니다.

Container는 말 그대로 물건을 싣는 큰 컨테이너 박스라고 생각하시면 됩니다.

여기에 데이터가 들어가 있는데,

이 데이터 꾸러미에 새로운 데이터를 추가하거나,

삭제도 하면서 수정하고 싶을때 사용하는 기능이

바로 Container Adaptor입니다. 

 

STL


bro 그러면 stack도 STL이야?

네 맞아요.

stack도 STL, 즉 Standard Template Library에 있는 Function 중 하나인 셈입니다.

STL에서 제공하는만큼 stack은 많이 사용이 되는 Function 중 하나입니다.

 

728x90

댓글