자료 구조 & 알고리즘(Data Structure & Algorithm)/자료 구조(Data Structure)

[Java] 자바 스택(Stack) 클래스 메서드 정리

다문다뭉 2024. 9. 25. 22:25

스택(Stack)?

스택은 선형자료구조이다.

스택은 가장 마지막에 저장된 데이터가 가장 빠져나가는 LIFO(Last In First Out) 구조이다.

 

스택의 특징

  • 후입선출 LIFO(Last In First Out) 구조 : 가장 늦게 들어온 데이터가 먼저 빠져나가는 구조
  • 단방향 입출력 구조 : 데이터의 들어오는 방향과 나가는 방향이 같다.
  • ​top 위치의 데이터만 접근 가능하기 때문에, 탐색하려면 모든 데이터를 꺼내야 한다.

 

스택의 선언

스택 선언할 때, 데이터 타입은 클래스 또는 래퍼 클래스로 선언할 수 있다.

import java.util.Stack;

class StackEx {
    public static void main(String[] args) {
        Stack<Integer> stackInt = new Stack<>();
        Stack<String> stackString = new Stack<>();
        Stack<Character> stackCha = new Stack<>();
    }
}

 

스택에 값 추가, 제거

push() : 스택에 값을 하나씩 추가한다.

pop() : 스택의 마지막 요소를 제거함과 동시에 해당 값을 반환한다.

import java.util.Stack;

class StackEx {
    public static void main(String[] args) {
        Stack<Integer> stackInt = new Stack<>();
        
        // 스택에 추가, 제거
	stackInt.push(1); // 추가
	stackInt.pop(); // 제거 및 반환, 스택 변화 O
    }
}

 

스택에 마지막 값 확인

peek() : 스택의 마지막 값을 반환하며, 스택에는 변화를 주지 않는다.

만약, 스택이 비어있을 경우 peek() 메서드 호출 시 NoSuchElementException 예외가 발생한다.

import java.util.Stack;

class StackEx {
    public static void main(String[] args) {
        Stack<Integer> stackInt = new Stack<>();
        
        // 가장 먼저 사용될 요소 반환
	stackInt.peek(); // NoSuchElementException 예외 발생
        
        stackInt.push(1);
        stackInt.peek(); // 1
    }
}

 

스택이 비어있는지 확인

isEmpty() : 스택이 비어있는지의 여부를 확인한다.

비어있을 경우 true, 비어있지 않을 경우 false를 반환한다.

import java.util.Stack;

class StackEx {
    public static void main(String[] args) {
        Stack<Integer> stackInt = new Stack<>();
        
        // 빈 여부 반환
	stackInt.isEmpty(); // true
        
        stackInt.push(1);
        stackInt.isEmpty(); // false
    }
}