[kotlin] 코틀린에서 제네릭을 사용하여 우선순위 큐(Priority Queue)를 다루는 방법은 어떻게 되는가?

우선순위 큐(Priority Queue)는 데이터를 넣은 순서나 크기 순이 아닌, 우선순위에 따라 처리하는 자료 구조입니다. 코틀린에서는 제네릭을 활용하여 우선순위 큐를 다룰 수 있습니다.

제네릭을 사용한 우선순위 큐 클래스 정의하기

코틀린에서 제네릭을 사용하여 우선순위 큐를 다루기 위해서는 PriorityQueue 클래스를 정의해야 합니다. 아래는 제네릭을 사용하여 우선순위 큐 클래스를 정의하는 예시 코드입니다.

class PriorityQueue<T : Comparable<T>> {
    private val queue: MutableList<T> = mutableListOf()

    fun add(item: T) {
        queue.add(item)
        queue.sort()
    }

    fun poll(): T? {
        if (queue.isNotEmpty()) {
            return queue.removeAt(0)
        }
        return null
    }
}

위 예시 코드에서 T : Comparable<T>는 제네릭 타입 TComparable 인터페이스를 구현하도록 제한합니다. 이는 우선순위 큐에서 요소들을 비교하기 위해 필요한 조건입니다.

제네릭 우선순위 큐 활용하기

이제 우선순위 큐를 활용하여 데이터를 추가하고 꺼내는 방법을 살펴봅시다.

우선, PriorityQueue를 생성하고 제네릭 타입을 명시합니다.

val priorityQueue = PriorityQueue<Int>()

우선순위 큐에 데이터를 추가할 때는 add 메서드를 사용합니다.

priorityQueue.add(10)
priorityQueue.add(5)
priorityQueue.add(20)

가장 우선순위가 높은 데이터를 꺼내올 때는 poll 메서드를 사용합니다.

val highestPriorityItem = priorityQueue.poll()

이제 제네릭을 사용하여 우선순위 큐를 다루는 방법에 대해 알게 되었습니다. 제네릭을 활용하면 여러 다양한 타입의 데이터에 대해 우선순위 큐를 쉽게 활용할 수 있습니다.

참고 자료