[kotlin] 코틀린에서 제네릭을 사용하여 스택(Stack)을 구현하는 방법은 어떻게 되는가?

제네릭을 활용한 스택(Stack)을 코틀린으로 구현하는 방법에 대해 알아보겠습니다. 스택은 후입선출(LIFO, Last-In-First-Out) 구조를 가지며, 제네릭을 사용하여 다양한 타입의 데이터를 저장할 수 있는 유연한 구조로 구현할 수 있습니다.

제네릭 스택 클래스 구현하기

class Stack<T> {
    private val elements = mutableListOf<T>()

    fun push(element: T) {
        elements.add(element)
    }

    fun pop(): T? {
        if (elements.isEmpty()) {
            return null
        }
        return elements.removeAt(elements.size - 1)
    }

    fun size(): Int {
        return elements.size
    }

    fun isEmpty(): Boolean {
        return elements.isEmpty()
    }
}

위의 코드는 제네릭을 사용하여 스택(Stack)을 구현한 예시입니다. T 는 제네릭으로, 이를 통해 스택이 다양한 타입의 데이터를 저장할 수 있습니다. 스택에 데이터를 추가하는 push 메서드와 데이터를 꺼내는 pop 메서드, 스택의 크기를 반환하는 size 메서드, 그리고 스택이 비어있는지 확인하는 isEmpty 메서드를 포함하고 있습니다.

제네릭 스택 사용하기

아래는 제네릭 스택을 사용하는 간단한 예제입니다.

fun main() {
    val stack = Stack<Int>()

    stack.push(1)
    stack.push(2)
    stack.push(3)

    println("Stack size: ${stack.size()}")

    while (!stack.isEmpty()) {
        println("Popped: ${stack.pop()}")
    }
}

마무리

제네릭을 활용하여 코틀린에서 스택을 구현하는 방법에 대해 알아보았습니다. 제네릭을 사용하면 스택이 다양한 타입의 데이터를 다룰 수 있어 더욱 유연하고 재사용성이 높아집니다.

참고 문헌: