[Java] stack의 구현

이대건·2023년 11월 21일

Java

목록 보기
2/17
post-thumbnail

stack이란?

  • First in Last out인 자료구조이다.
  • Java에서 Stack이라는 클래스로 구현할 수 있다.

Stack class

  • vector를 상속받는 클래스다.
  • 추가 메모리 할당시 기존 사이즈의 두 배 만큼 할당한다.

Deque vs Stack

그럼 Deque를 활용해서 stack처럼 사용하면 되지 않는가?라는 생각이 들 수 있다.
Java 공식문서에서는 레거시인 Stack 대신 Deque를 사용하기를 권장한다.

  • 함수는 아래와 같이 매핑된다.
    - push = addFirst(e)
    - pop() = pollFirst() 또는 removeFirst()
    - peek() = peekFirst()
  • 속도는 Deque를 통해 구현했을 때 Stack 구현체보다 더 빠르다고 한다.
  • 메모리는 추가 할당시 Deque는 기존 사이즈의 50%만큼을 추가 할당하고, Stack은 기존 사이즈의 100%만큼 할당하여 Deque이 더 적은 메모리를 사용한다.

왜 xxxLast가 아닌 First를 권장하는가

  • 전제 조건: 습관처럼 peek()을 쓰기가 쉽다.
  • 문제 원인: peek은 First를 가리키는 것이 default이다.
  • addLast, pollLast를 할 시 습관대로 peek()을 사용하면 확인하고자 하는 값이 아닌 다른 값을 조회하는 행위

removeFirst()와 pollFirst()의 차이

  • removeFirst(): 만약 deque이 비어있다면 NoSuchElementException이 발생
  • pollFirst(): deque이 비어있더라도 null을 반환

stack에 대응되도록 구현하려면 예외를 발생시키는 removeFirst를 사용하는 것이 바람직하다
다만 pollFirst는 예외처리를 강제하지 않기 때문에 null 체크만 해준다면 더 간결한 코드를 작성할 수 있다.

정리

stack 구현DequeStack
속도더 빠르다더 느리다
메모리더 적게 씀더 많이 씀
legacyXO
사용 권장OX

출처

자바 공식 문서: https://docs.oracle.com/javase/8/docs/api/java/util/Stack.html

profile
일낸머스크

0개의 댓글