Stack

: 데이터를 일시적으로 쌓아놓는 자료구조이다.

 

특징

- LIFO: 후입선출

- 단방향 구조

- 한 번에 데이터 한 개만 삽입, 삭제

- 스택이 비었을 때 pop() 또는 peek()를 호출할 시 EmptyStackException 발생

- DFS 등에서 사용

 

구성요소

- Element: 데이터 요소

- Top: 가장 최근에 들어온 데이터의 위치로 데이터의 추가, 삭제가 이뤄지는 지점

- Bottom: 가장 먼저 들어온 데이터의 위치로 스택의 가장 아래 지점 

 

 

선언

- java.util.Stack 클래스에서 제공한다.

//ex Integer 형
Stack<Integer> stack = new Stack<>();

 

데이터 추가

- push();

- 값 추가 및 반환

- 스택 비어있을 시 EmptyStackException 반환

Stack<Integer> stack = new Stack<>();

stack.push(6);

 

데이터 제거

- pop();

- 가장 상단 값 반환 및 제거

- 스택 비어있을 시 EmptyStackException 반환

Stack<Integer> stack = new Stack<>();

stack.push(1);
stack.push(2);

stack.pop();// 2제거
stack.pop();// 1제거

 

다양한 메서드

메서드 설명 반환값 예시
peek() 가장 상단 값 반환, 삭제x 스택의 마지막 요소
- 스택 비어있을 시 EmptyStackException
stack.peek();
empty() 스택 비어있는지의 여부 반환 - 빈 경우: true         
- 안 빈 경우: false
stack.empty();
search() 스택에 특정 데이터 존재 확인 - 있음: pop 시 나오는 순서 반환    // 1부터 시작  
- 없음: -1 반환
stack.search(obj);
clear() 스택 비우기   stack.clear();
size() 스택의 크기 반환 스택의 크기 stack.size();

 

 

EmptyStackException

- Stack이 비어있는 상태에서 pop() 또는 peek()를 호출하면 EmptyStackException이 발생한다.

 

 

Stack 클래스 사용 지양

이유

Vector 클래스는 구현된지 오래된 클래스라 취약점이 많다.

Stack 클래스Vector 클래스를 상속받아 구현된 클래스로 부모 클래스가 취약점이 많은 문제에 따라

자식클래스인 Stack 클래스도 불안정해지는 문제가 발생한다.

 

예시

- Vector 클래스의 add()를 사용할 수 있어 Stack의 의도와 다르게 사용할 수 있는 문제가 발생한다.

Stack<Integer> stack = new Stack<>();

stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);

stack.add(2, 6); //Vector 클래스의 add() 사용 가능 => 특정 인덱스에 6을 추가할 수 있게 됨
System.out.println(stack.pop()); //마지막에 넣은 값인 6이 아니라 5가 출력됨

'CS > DataStructure&Algorithm' 카테고리의 다른 글

구간 합 알고리즘  (0) 2025.05.01
선형구조 - 큐  (1) 2025.04.30
검색 알고리즘  (0) 2025.04.29
선형구조 - 연결 리스트 구현해보기  (1) 2025.04.29
선형구조 - 순차 리스트  (1) 2025.04.23

+ Recent posts