[Java 활용] 3.8 Stack 클래스

Java의 Stack 클래스는 자료구조 스택을 구현한 것입니다. 자료구조 스택은 LIFO(List In First Out, 후입선출) 형태로 자료를 보관하는 임시 버퍼입니다. 버퍼는 임시로 자료를 보관해 두었다가 필요할 때 꺼내 쓰는 저장소며 스택은 꺼내달라고 요청하면 가장 최근에 보관한 자료를 꺼내줍니다.

Java의 Stack 클래스에서는 일반적인 스택에 약속하고 있는 push 메서드와 pop 메서드를 제공하고 있으며 이 외에 peek, emptry 메서드 및 search 메서드를 제공합니다.

public void push(Element data);//순차보관
public Element pop();//가장 최근에 보관한 값 꺼내고 반환
public Element peek();//가장 최근에 보관한 값 단순 참조, 꺼내지 않음
public boolean empty(); //비어있는지 판별
public int search(Element data); //data를 보관한 순번 반환(1부터 시작)

push 메서드는 스택에 자료를 보관할 때 사용하는 메서드이며 pop 메서드는 가장 최근에 보관한 자료를 꺼낼 때 사용하는 메서드입니다. peek 메서드는 가장 최근에 보관한 자료를 단순 참조할 때 사용하며 empty 메서는 비어있는지 판별하는 메서드입니다. 그리고 search 메서드는 자료가 몇 번째에 있는지 순번을 반환합니다. 주의할 점은 search 메서드의 반환 값은 인덱스가 아니라 순번입니다. 따라서 2,3 순으로 자료를 보관할 때 search(3)의 결과는 2입니다.

다음은 스택을 사용한 예제 코드입니다.

▷ 소스 3.10 스택 사용 예

//스택 사용 예
import java.util.Stack;
public class Program {
	public static void main(String[] args){
		Stack stack = new Stack();
		stack.push(3); //3
		stack.push(2); //3, 2
		System.out.println(stack.pop()); //2를 출력, 스택에는 3
		stack.push(6); //3, 6
		stack.push(8); //3, 6, 8
		System.out.println(stack.peek()); //가장 최근에 보관한 값은 8 
		System.out.println(stack.search(6));//두 번째 보관한 요소임
		while(stack.empty()==false){
			System.out.println(stack.pop());//8, 6, 3 순으로 꺼냄
		}
	}
}

▷ 소스 3.10 실행 결과

2
8
2
8
6
3
[그림 3.4] 소스 3.10 수행 과정(Loop 이전까지)

[그림 3.4]는 소스 3.10을 수행하는 과정을 도식화한 것입니다. while 문 이전까지의 모습을 표현한 것이며 참고하여 확인하시기 바랍니다.