목표
- Stack의 특징을 익힌다.
- Stack의 사용법과 구현을 익힌다.
개요
Stack은 LIFO(Last In First Out)의 특징을 가지는 자료 구조이다. 즉, 맨 마지막에 들어온 값이 가장 먼저 나가는 자료 구조이다.
Kotlin에서는 Stack을 사용하기 위에 JCF의 Stack을 가져와 사용한다. Stack의 상속구조는 조금 복잡해서 List 위쪽(List가 확장하는 인터페이스)은 간소하게 표현했다.
생성
Stack의 생성은 간단하다. Stack은 클래스이기 때문에, 생성자를 이용해 생성할 수 있다.
val stack: Stack<Int> = Stack()
조작
Stack의 조작 방법은 간단하다. Stack 클래스에서는 총 3가지의 Stack 연산을 지원한다. Stack에서 Vector Class를 상속받아 이 외의 연산들도 지원하지만, Stack을 사용하기 위해서는 아래 3가지 연산만 있으면 된다.
- push(item : E)
- pop() : E
- peek() : E
- search(object : Object) : Int
*java 파일을 임의로 코틀린 형태로 바꾸었다. 원본을 보고 싶은 사람은 java.util 패키지의 Stack Class를 보자
push(item : E)
push 연산은 stack에 값을 채워 넣는 연산이다. push 연산을 수행할 때마다 stack에 값이 순차적으로 채워진다.
val stack: Stack<Int> = Stack()
stack.push(3) // [3]
stack.push(4) // [3, 4]
stack.push(5) // [3, 4, 5]
pop() : E
pop 연산은 stack에서 값을 빼내는 연산이다. LIFO 구조이므로, 마지막에 들어간 값이 먼저 나온다. 만약에 빈 stack에 pop연산을 하게 되면 EmptyStackException이 나온다.
val stack: Stack<Int> = Stack()
stack.push(3) // [3]
stack.push(4) // [3, 4]
stack.push(5) // [3, 4, 5]
print(stack.pop()) // output: 5 , stack = [3, 4]
print(stack.pop()) // output: 4 , stack = [3]
print(stack.pop()) // output: 3 , stack = []
print(stack.pop()) // Exception in thread "main" java.util.EmptyStackException
peek() : E
peek연산은 다음에 pop을 하면 무엇이 나올지를 보는 연산이다. Stack에서 값이 빠져나오지 않고 보기만 할 수 있다.
val stack: Stack<Int> = Stack()
stack.push(3) // [3]
stack.push(4) // [3, 4]
stack.push(5) // [3, 4, 5]
print(stack.peek()) // output: 5 , stack = [3, 4, 5]
print(stack.peek()) // output: 5 , stack = [3, 4, 5]
print(stack.peek()) // output: 5 , stack = [3, 4, 5]
반응형