Stack은 한국말로 '쌓다' 라는 뜻을 가지고 있습니다. Data Structure에서의 Stack도 개념적으로 실세계의 Stack의 의미와 동일합니다.
어떤 물건을 쌓을때는 위에다가 차곡차곡 쌓습니다.
무거운 20KG짜리 원판을 쌓아올린다고 생각해 봅시다. 20KG 원판을 쌓을때는 제일 바닥에서 부터 쌓아올립니다.
그렇다면 원판을 제거할 때에는 어떻게 할까요? 🧐
바로 이렇게 위에서 부터 제거할 수 있습니다.
Data Structure에서의 Stack 또한 이러한 역할을 하게 됩니다.
그리고 이러한 구조를 LIFO (Last-In First-Out)이라고 표현할 수도 있습니다.
DataStructure에서의 Stack에서는 아래에서 부터 차곡차곡 어떠한 요소를 쌓는 과정을 Push라고 하고, 위에서 부터 요소를 제거하는 과정을 Pop이라고 합니다.
Stack은 어디에서 찾아볼 수 있을까요 👀
- iOS의 Navigation Controller를 사용할 때 Stack구조를 사용합니다. View Controller를 push하고, pop하면서 화면의 전환을 해줄 수 있습니다.
- Memory Allocation 에서 architectural level에서도 사용하며, 로컬 변수의 메모리 또한 Stack을 사용합니다.
Stack을 Swift로 구현해보면 다음과 같이 구현할 수 있습니다.
public struct JoonStack<T> {
private var storage: [T] = []
//push and pop
public mutating func push(_ element: T) {
storage.append(element)
}
@discardableResult
public mutating func pop() -> T? {
storage.popLast()
}
public func showStack() {
let toPrint = storage.map { "\($0)" }.reversed().joined(separator: "\n")
print(toPrint)
}
}
간단하게 push와 pop의 기능만 넣어서 구현해 보았습니다.
var stack = JoonStack<String>()
stack.push("Joons")
stack.push("Hello")
stack.push("Swift")
stack.push("iOS")
stack.push("macOS")
stack.showStack()
String타입의 Stack을 생성하여 여러개의 요소를 push해보고 출력하면 다음과 같이 출력이 됩니다.
제일 처음 넣은 Joons가 제일 아래에 있고, 제일 마지막에 넣은 macOS가 제일 위에 있는게 보이시나요?
이제는 pop을 해보겠습니다.
제일 위에있던 macOS가 없어졌습니다! 🤩
이번 포스팅에서는 간단하게 Stack의 정의와 Stack의 push, pop에 대한 코드를 직접 간단하게 구현해 보았습니다.
수정해야할 부분이나 보완해야할 부분이 있다면 댓글로 남겨주시면 감사하겠습니다!
'Data Structure' 카테고리의 다른 글
Linked List (with Swift) - Removing values (0) | 2020.12.11 |
---|---|
Linked List (with Swift) - Node and Adding Values to List (0) | 2020.12.10 |