Java Stack 클래스 완벽 가이드: 사용법과 핵심 메서드
Java Stack 클래스
Java 컬렉션 프레임워크에는 클래식 스택 자료구조를 구현한 Stack 클래스가 포함되어 있습니다. 공식 Java 문서에 따르면 Stack은 Vector를 상속받아 모든 메서드를 물려받으면서 스택 전용 연산을 추가합니다.
Stack 구현 원리
스택은 후입선출(LIFO, Last In First Out) 원칙을 따릅니다: 요소는 상단에 푸시(push)되고 상단에서 팝(pop)됩니다. 다음 다이어그램이 이 동작을 보여줍니다.
Stack 생성하기
스택을 생성하려면 java.util.Stack을 임포트하고 원하는 제네릭 타입으로 인스턴스화하세요:
Stack<Type> stack = new Stack<>();
예제:
// Integer 스택
Stack<Integer> intStack = new Stack<>();
// String 스택
Stack<String> stringStack = new Stack<>();
Stack 메서드
상속받은 Vector 메서드 외에도 Stack은 일반 컬렉션과 구별되는 5가지 전용 연산을 제공합니다. 전체 Vector 메서드 목록은 Vector 클래스 문서를 참조하세요.
push() 메서드
push() 메서드는 요소를 스택 상단에 추가합니다.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
}
}
출력
Stack: [Dog, Horse, Cat]
pop() 메서드
pop() 메서드는 스택 상단의 요소를 제거하고 반환합니다.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Initial Stack: " + animals);
String removed = animals.pop();
System.out.println("Removed Element: " + removed);
}
}
출력
Initial Stack: [Dog, Horse, Cat] Removed Element: Cat
peek() 메서드
peek() 메서드는 상단 요소를 제거하지 않고 조회합니다.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
String top = animals.peek();
System.out.println("Element at top: " + top);
}
}
출력
Stack: [Dog, Horse, Cat] Element at top: Cat
search() 메서드
search() 메서드는 스택 상단에서부터 1-기반 위치로 요소의 위치를 반환하며, 요소가 없으면 -1을 반환합니다.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
int pos = animals.search("Horse");
System.out.println("Position of Horse: " + pos);
}
}
출력
Stack: [Dog, Horse, Cat] Position of Horse: 2
empty() 메서드
empty() 메서드는 스택에 요소가 있는지 확인합니다.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
boolean isEmpty = animals.empty();
System.out.println("Is the stack empty? " + isEmpty);
}
}
출력
Stack: [Dog, Horse, Cat] Is the stack empty? false
Stack 대신 ArrayDeque 사용하기
Stack은 스택을 구현하지만 레거시로 간주됩니다. 최신 Java 코드는 Deque 인터페이스를 구현한 ArrayDeque를 스택 기능으로 선호하는데, 더 나은 성능과 명확한 의미론을 제공하기 때문입니다. 자세한 내용은: