Stack

연어는결국강으로·2022년 10월 26일
0

알고리즘 공부

목록 보기
7/15

2022.10.26

1. 스택이란 무엇인가?

  • 자바를 처음 배울 때 메모리에 stack영역이 있다고했는데 여기서 쓰는 자료구조이다.
  • 이름 자체를 두고 직관적으로 생각해보면, 쌓는것이다.
  • 차곡 차곡 데이터를 쌓는다고 생각했을 때, 다 쌓고나서 쌓은것을 꺼낸다면 아마도 마지막에 놓은 친구를 꺼내지 않을까? 이를 줄여서 LIFO(Last In First out)라고 한다.

2. 스택 활용법

(1) push

stack.push(1);
  • 스택에 데이터를 삽입하는 매서드이다.

(2) pop

stack.pop();
  • 스택에 있는 데이터를 꺼내는 매서드이다.
  • 꺼낸다는 말은 데이터를 반환받고, 삭제한다는 말이다.

(3) peek

stack.peek();
  • 마지막에 있는 데이터를 조회하는 매서드이다.
  • pop과 다른점은 peek은 stack에 있는 데이터를 삭제하지 않는다.

(4) isEmpty

stack.isEmpty();
  • 말그대로 비어있는지 확인함.


3. 자바 Stack 클래스의 문제점

  • Stack 클래스는 synchronized 키워드가 붙어있기 때문에 Thread-safe 하다는 특징을 가지고 있다. 즉, 멀티스레드 환경이 아닐 때 사용하면 lock을 거는 작업 때문에 많은 오버헤드가 발생하게 된다.
  • Stack 클래스는 Vector 클래스를 확장하는데 이 때문에 LIFO구조가 무너진다.
  • JDK 1.0부터 존재하다 보니 자바에서 잘못 설계를 했다고 한다.
  • 해서 ArrayDeque를 대신 사용하는게 좋다고 한다.

참고 링크
1. [Java] Stack 클래스는 무엇이고 문제점은 무엇일까?
2. Github : wjdrbs96 - 제 깃헙아닙니다 ㅎ

0개의 댓글