chacha's

[ Kotlin ] 코틀린에서 Queue 사용하기 본문

Kotlin

[ Kotlin ] 코틀린에서 Queue 사용하기

Cha_Cha 2021. 12. 11. 00:02

목차

     

    C++ 에는 STL에 Queue가 있습니다. 하지만 Kotlin에는 명확히 Queue라고 기재된 라이브러리가 없는 듯하였습니다. 대신 ArrayDeque라고 보통은 덱(Deck)이라고 불리는 컬렉션이 있습니다. 사실 덱이 있다면 굳이 따로 큐를 선언하여 쓰지 않아도 된다고 생각하기 때문에 해당 라이브러리를 사용하는 것이 좋을 듯합니다.

    Queue 구조 ( 출처 : https://www.bezkoder.com/kotlin-queue/ )

    📌 코틀린에서 Queue를 사용하는 방법은 3가지 정도 있습니다. 

    1️⃣ ArrayDeque 사용하기

    2️⃣ Kotlin에 존재하는 여러 라이브러리 중 하나를 큐(Queue)처럼 사용하기

    3️⃣ Java에서 제공하는 큐(Queue) 라이브러리 사용하기

     

    ⭐1️⃣ ArrayDeque 사용하기

     ArrayDeque - Doc 

    Deque란 양방향에서 삽입, 삭제가 가능한 자료구조입니다. 이 자료구조를 큐처럼 사용할 수 있습니다.

    import kotlin.collections.ArrayDeque
    
    fun main() {
        val arrayDeque = ArrayDeque<Int>()
        arrayDeque.add(1)
        arrayDeque.add(2)
        arrayDeque.addLast(3) // .add() 와 동일하게 동작
    
        print(arrayDeque) // [1,2,3]
    
        arrayDeque.removeFirst()
    
        print(arrayDeque) // [2,3]
    }

    🚥 Deque 이미지

    Deque ( 출처 :&nbsp;https://www.crocus.co.kr/1182 )

     

     2️⃣ ArrayList를 큐처럼 사용하기

    Queue라는 자료구조는 C++을 이용할 때도 꼭 Queue STL을 선언하지 않고 Vector를 사용하여 구현하는 경우도 있었습니다. ( 사실 이 경우 pop 시에 O(n)의 시간이 걸리기 때문에 적절한 방법은 아닐 수 있습니다. )

    Kotlin에서도 ArrayList를 활용하여 Qeueu를 구현하여 사용할 수 있습니다. C++의 vector와 같은 이유로 ArrayList는 remove 시에 O(n)의 시간이 걸리기 때문에 다른 방법을 사용하는 것이 적합할 것 같습니다.

     

     3️⃣ Java의 Queue 라이브러리 사용하기

     Kotlin Queue tutorial with examples

    코틀린은 Jvm을 기반으로 하는 언어이기 때문에 자바에 존재하는 라이브러리를 사용할 수 있습니다. 자바에는 명확히 Queue라고 명시된 라이브러리가 있습니다. ( Queue - Java Doc 참고 )

    공식 문서를 참고하면 해당 라이브러리는 인터페이스로 되어 있고 Queue 인터페이스를 구현하고 있는 여러 클래스들이 있다는 것을 알 수 있습니다.

    Queue 인터페이스를 구현하는 다양한 클래스들

    따라서 Java의 큐 라이브러리를 사용하려면 Queue 인터페이스를 구현하고 있는 클래스를 인스턴스화 하여 사용할 수 있습니다. 주로 LinkedList를 사용하는 듯합니다.

    import java.util.Queue
    import java.util.LinkedList
    
    fun main(args: Array<String>) {
      
      val nums: Queue<Int> = LinkedList<Int>()
      val names: Queue<String> = LinkedList<String>(listOf("Jack", "Adam", "Katherin"))
      val persons: Queue<Person> =
          LinkedList<Person>(listOf(Person("Jack", 27), Person("Adam", 28), Person("Katherin", 19)))
    }

     

    END

    'Kotlin' 카테고리의 다른 글

    컬렉션(Collections)  (0) 2021.09.12
    Comments