문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 스택(자료구조) (문단 편집) == 개요 == 후입선출(後入先出/Last In First Out—LIFO)[* 여기서 Last니 First니 하는 것은 스택에 데이터가 드나드는(출입하는) 순서를 말한다. 풀어 쓰면 '나중에 들어온 데이터가 먼저 나간다.' 선입후출(先入後出/First In Last Out—FILO)이라고도 하지만 어차피 의미는 같다.] 특성을 가지는 [[자료구조]](Data Structure)를 일컫는다. 메모리에 새로 들어오는 데이터의 위치가 메모리 말단(일명 '탑 포인터')이고[* Top Pointer. 그냥 탑(Top)이라고도 한다. 후입선출이라는 특성상 가장 먼저 빠져나갈 데이터의 위치이기도 하다.], 써먹기 위해 내보내는 데이터 역시 메모리 말단을 거친다. 스택의 추상자료형(Abstract Data Type—ADT)을 살펴보면, 입력연산은 푸시(Push), 출력연산은 팝(Pop)이라고 부른다. 조회연산은 피크(Peek)라고 하는데, 탑 포인터가 가리키는 데이터를 조회(확인)만 할 뿐, 탑의 순번(順番/인덱스—Index)은 변화시키지 않는 연산을 의미한다. 스택의 역사를 짚어 보면 1946년 [[앨런 튜링]](Alan Turing)까지 거슬러 올라간다. 당시 앨런 튜링은 서브루틴을 호출하는 과정을 베리(bury), 되돌아오는 과정을 언베리(unbury)라고 불렀는데, 이 것을 스택의 기원이라고도 한다. 스택은 콜 스택(Call Stack)이라 하여 컴퓨터 프로그램의 서브루틴에 대한 정보를 저장하는 자료구조에도 널리 활용된다. 컴파일러가 출력하는 에러도 스택처럼 맨 마지막 에러가 가장 먼저 출력되는 순서를 보인다. 또한 스택은 메모리 영역에서 LIFO 형태로 할당하고 접근하는 구조인 아키텍처 레벨의 하드웨어 스택의 이름으로도 널리 사용된다. 이외에도 꽉 찬 스택에 요소를 삽입하고자 할 때 스택에 요소가 넘쳐서 에러가 발생하는 것을 스택 버퍼 오버플로(Stack Buffer Overflow)라고 부른다. 개발자들이 즐겨 이용하는 질의응답 서비스 사이트인 [[https://stackoverflow.com/|스택 오버플로]]의 명칭 또한 여기서 유래했다.[* [[https://www.onlybook.co.kr/entry/algorithm-interview|<파이썬 알고리즘 인터뷰>]] p.242, 책만, 2020] 쉽게 말해 스택은 '쌓여있는 팬케이크'를 생각하면 된다. 우리가 [[팬케이크]](핫케이크)를 만들어 먹는다고 가정을 하자. 우리는 프라이팬에 [[버터]]를 두르고 팬케이크를 따끈따끈하게 구워내기 시작했으며 이제 팬케이크를 그릇 위에 옮길 것이다. 잘 구워진 팬케이크 하나, 살짝 탄 팬케이크 하나, 덜 익은 팬케이크 하나... 이렇게 팬케이크를 쌓던 도중, 우리의 팬케이크를 유심하게 지켜보던 아이가 '팬케이크'를 하나 달라고 한다. 그럼 어떻게 팬케이크를 줄 것인가? 당연히 사회통념적인 생각적으로 '쌓던 팬케이크 중에서 맨 위에 있는 팬케이크를 줄 것이다.' 우리는 팬케이크 굽는 것을 멈추고 그릇에 쌓여있던 팬케이크 중 막 구워진 가장 위에있는 팬케이크를 아이에게 줄 것이다. 이는 즉 위에서 설명하였던 Last In Fisrt Out(LIFO)가 된다. 가장 나중에 (그릇에)올라온 것이 가장 먼저 나가게 되는 것이다. 스택은 '''힙 영역 메모리에서 일반적인 데이터를 저장하는 스택'''과 '''스택 영역 메모리에서 프로그램의 각 분기점에 변수와 같은 정보를 저장하기 위한 스택'''이라는 두 가지 의미로 사용될 수 있므로 유의해야 한다. 이것도 종류를 나눌 수 있는데, '''Ascending stack''' VS '''Descending stack''' '''Empty stack''' VS '''Full stack''' [[http://www-mdp.eng.cam.ac.uk/web/library/enginfo/mdp_micro/lecture5/lecture5-4-2.html|으로 종류가 나뉜다. ]]저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기