Stack
Last updated
Last updated
다음은 스택이 실제로 사용되는 몇 가지 경우입니다.
운영체제(OS: Operating System) 프로그램에서 사용되는 함수들을 스택 자료형에 저장하여 사용합니다.
컴파일러(Compiler) 수학 기호들을 기계어로 변환시 사용합니다. (괄호 등을 매칭하는 경우)
자바 가상 머신(JVM: Java Virtual Machine) JVM 내에서 메서드가 실행, 종료될 때 스택 프레임을 이용하여 관리합니다.
페이지 뒤로가기
실행 취소
수식 괄호 검사
자바 내부에서 스택은 Vector 클래스를 상속받아 사용한다. Vector 자료구조는 ArrayList와 크게 다르지 않다. 내부 구조는 Object[ ] 배열로 데이터들을 관리하며 전체적인 메서드 구조 또한 많이 유사하다. 다만 차이점은 동기화를 지원하냐 안하냐의 여부인데, ArrayList에서는 동기화를 지원하지 않고, Vectorㅇ에서는 동기화를 지원한다. 그렇다 보니 속도 자체는 ArrayList가 조금 더 빠르지만, Thread safe 하지 않다.
쉽게 생각해서 멀티 스레드 환경에서는 Vector, 아닐 경우는 ArrayList를 쓰는 것이 현명하다.
Stack 인터페이스에 구현된 메서드 살펴보겠다. 몇 가지 자주 사용하는 메서드들은 다음과 같다.
<Stack Interface에 선언된 대표적인 메서드>
자바에서는 Vector 클래스를 상속받다 보니 위의 클래스보다 훨씬 많은 메서드 지원한다.(Vector 클래스에 있는 메서드 + 위에 선언된 메서드)
메서드
리턴 타입
설명
push(E item)
E
스택 맨 위에 요소 추가
pop( )
E
스택 맨 위 요소 제거, 제거된 요소 반환
peek( )
E
스택 맨 위 요소 제거X 반환
search(Object o)
int
스택의 상단부터 탐색하여 지정된 객체가 있는 요소의 위치 반환. 없을 경우 -1 반환.
size( )
int
현재 스택에 있는 요소 갯수 반환
dear( )
void
모든 요소 제거
empty( )
int
현재 스택엥 요소 존재 X : true, 그 외의 경우 false 반환