본문 바로가기

프로그래밍/Java 프로그래밍

자바의 스택(stack)

스택은 프로그램에서 가장 많이 쓰이는 자료구조입니다. 우리가 일반적으로 프로그래밍할때는 많이 쓰이지 않을 수도 있지만 실제로 컴퓨터에서는 굉장히 많이 사용하고 있습니다. 우리가 메소드를 호출할 때 메소드에서 다른 메소드를 호출할 수도 있습니다. 메소드는 실행을 마치고 돌아갈 곳을 기억해야합니다. 그럴때 마지막에 있는 호출한 메소드의 주소부터 반환해주어야 합니다. 그러기 위해서는 가장 마지막에 들어간 값이 가장 먼저 나와야합니다. 이것은 스택의 기본 성질입니다. 우리가 편의점에서 물건을 스택한다고 말을 합니다. 편의점 음료수 냉장고를 살펴보도록 하겠습니다. 음료수를 밀어넣는 구조로 되어있습니다. 그래서 차례로 음료수를 넣으면 꺼낼때에는 가장 마지막에 넣은 음료수가 가정 먼저 나오게 되어있습니다. 스택은 가장 넣은 것이 가장 먼저나온다고 해서 LIFO(Last In First Out)라는 성질을 가집니다. 이것은 FIFO(First In First Out)의 큐와는 정반대의 개념입니다. 스택은 굉장히 중요한 개념이고 컴퓨터에서 많이 쓰이기 때문에 꼭 알아둘 필요가 있는 자료구조입니다.


스택의 기본 메소드에대해서 알아보겠습니다.

아까 말한대로 스택은 LIFO구조를 가집니다. 그래서 값을 넣는 메소드인 push와 값을 꺼내는 메소드인 pop을 가집니다. push는 스택에 값을 저장하는 메소드입니다. pop은 값을 꺼내고 삭제하는 기능을 합니다. 한번 pop한 값은 사라지게 됩니다. 그래서 실제로 pop을 사용하지 않고 값을 보기만 하는 peek 메소드도 존재합니다.


자바에서는 따로 스택구조를 제공해주지는 않습니다. 그래서 직접 구현을 해야합니다. 완변하지는 않지만 예제로 간단히 구현해봤습니다.



위의 프로그램에서 push, pop, peek 그리고 show 메소드를 구현했습니다. 에러처리같은 부분은 생략된 버전입니다. 단순히 어떤 동작이 필요하다는 것을 보여주는 예제라고 할 수 있습니다. method1, method2 그리고 method3를 push 메소드를 사용해서 값을 넣습니다. 그런다음에 show를 이용해서 모든 값을 출력하면 method1, method2, method3가 출력됩니다. 그런다음에 pop을 사용하면 method3를 얻어낼 수 있습니다. 그런다음에 모든 값을 출력하면 method1, method2만 출력됩니다. 왜냐하면 pop을 이용해서 값을 꺼내면 그 값이 사라지기 때문입니다. 하지만 peek을 사용하면 값을 보기만 할 뿐 사라지지 않습니다. 그래서 peek메소드 뒤에 show를 이용해서 전체 출력을 하면 method2가 그냥 남아있는 것을 알 수 있습니다.