JAVA Stack

김개발세발바닥·2024년 3월 26일

JAVA

목록 보기
3/12

Stack 클래스.

마지막에 들어온 데이터를 가장 처음에 꺼내는 LIFO 기능을 구현하려고 할 때 필요한 클래스다.

LIFO는 Last In First Out의 약자로 후입선출이라고 한다. -> 나중에 들어온 값을 먼저 처리.

LIFO 기능을 위해 이 클래스를 사용하는건 권장하지는 않는다. 왜냐하면 ArrayDeque라는 클래스가 존재하기 때문이다.
하지만 ArrayDeque클래스는 쓰레드에 안전하지 않다. 성능은 떨어지지만 안전한 LIFO 기능을 원한다면 Stack 클래스를 사용하면 된다.

Stack 클래스의 상속 관계.

java.lang.Object 
-> java.util.AbstractCollection<E> 
-> java.util.AbstractList<E> 
-> java.util.Vector<E>
-> java.util.Stack<E>

Stack 클래스의 부모 클래스는 Vector인 것을 볼 수 있다. 즉 Vector 클래스에서 제공하는 모든 메소드를 사용할 수 있다.

Stack 클래스는 자바에서 상속을 잘못 받은 클래스다.
이 클래스가 JDK 1.0부터 존재했기 때문에 원래의 취지인 LIFO를 생각한다면 Vector에 속하면 안된다.
하지만, 자바의 하위 호환성을 위해서 이 상속관계를 유지하고 있다.

Stack의 생성자.

Stack 클래스의 생성자는 단 하나다.

  • Stack() -> 아무 데이터도 없는 Stack 객체를 만든다.

Stack의 메소드.

  • empty() -> 객체가 비어있는지를 확인한다.
  • peek() -> 객체의 가장 위에 있는 데이터를 리턴한다.
  • pop() -> 객체의 가장 위에 있는 데이터를 지우고 리턴한다.
  • push(E item) -> 매개 변수로 넘어온 데이터를 가장 위에 저장한다.
  • search(Object o) -> 매개 변수로 넘어온 데이터의 위치를 리턴한다.

Stack 클래스는 생각보다 간단하다. 하지만 이걸 공부하면서 Stack을 쓰는게 더 유리한 로직이 있다는것이 깨닫게 되었다.
당장 고치러 가야지.

0개의 댓글