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

아래는 코틀린에서 제네릭을 사용하여 큐를 구현하는 예제 코드입니다.

class Queue<T> {
    private val elements: MutableList<T> = mutableListOf()

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

    fun dequeue(): T? {
        return if (elements.isNotEmpty()) {
            elements.removeAt(0)
        } else {
            null
        }
    }

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

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

fun main() {
    val queue = Queue<Int>()
    queue.enqueue(1)
    queue.enqueue(2)
    queue.enqueue(3)

    println(queue.dequeue()) // 출력: 1
    println(queue.dequeue()) // 출력: 2
    println(queue.size())    // 출력: 1
}

위 코드에서 Queue 클래스는 제네릭 타입 T를 사용하여 데이터를 저장합니다. 큐에 요소를 추가하는 enqueue 메서드와 요소를 제거하는 dequeue 메서드는 제네릭 타입을 받아들이거나 반환합니다. 이를 통해 큐를 정의할 때 어떤 타입의 데이터도 다룰 수 있습니다.

이와 같이 제네릭을 사용하여 큐를 구현하면, 타입에 안전한 방식으로 데이터를 다룰 수 있으며 코드의 재사용성과 유연성을 향상시킬 수 있습니다.

더 자세한 정보는 코틀린 공식 문서를 참고하십시오.