Kotlin에서 스택 데이터 구조 사용

Kailash Vaviya 2024년2월15일
  1. Kotlin의 스택 데이터 구조
  2. Kotlin에서 ArrayDeque() 사용
Kotlin에서 스택 데이터 구조 사용

오늘은 코틀린에서 스택을 사용하는 방법에 대해 알아보겠습니다. 또한 push, pop, peek, searchisEmpty를 포함하는 Kotlin 스택을 업데이트하고 변경하는 데 사용되는 표준 함수도 볼 수 있습니다.

또한 Kotlin의 스택보다 더 나은 대안을 살펴볼 것입니다.

Kotlin의 스택 데이터 구조

스택은 후입선출(LIFO) 메커니즘을 따르는 데이터 구조입니다. 이는 여러 개체의 데이터베이스를 만드는 데 사용할 수 있음을 의미합니다.

스택은 Java 컬렉션 프레임워크의 일부이므로 Java에서 사용이 두드러지지만 Java에서 Stack 라이브러리를 가져와서 Kotlin에서 스택을 생성할 수 있습니다.

라이브러리를 가져오면 스택을 생성하고 개체를 추가할 수 있습니다. 이 예제에서는 cars라는 스택을 생성한 다음 addAll() 메서드를 사용하여 자동차 브랜드 이름을 추가합니다.

import java.util.Stack

fun main(args: Array<String>){
    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))

    for(c in cars){
        println(c)
    }

}

출력:

kotlin에서 스택 데이터 구조 사용 - 출력 1

보시다시피 위의 코드 예제는 스택을 생성하고 4개의 자동차 브랜드를 추가합니다. 다음으로 사전 정의된 함수를 사용하여 이 스택을 작동하는 방법을 살펴보겠습니다.

Kotlin 스택의 push() 함수

push() 함수를 사용하면 스택에 새 객체를 추가할 수 있습니다. 추가된 개체는 기본적으로 스택의 맨 위로 이동됩니다.

아래 예제에서는 push() 함수를 사용하고 위에서 생성한 스택에 다른 객체를 추가합니다.

import java.util.Stack

fun main(args: Array<String>){
    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
    cars.push("Lamborghini")

    for(c in cars){
        println(c)
    }

}

출력:

kotlin에서 스택 데이터 구조 사용 - 출력 2

Kotlin 스택의 pop() 함수

이름에서 알 수 있듯이 pop() 함수는 스택에 추가된 마지막 요소를 팝아웃합니다. 따라서 마지막에 추가된 요소 때문에 후입선출 메커니즘이 먼저 제거됩니다.

따라서 동일한 예를 고려하여 스택 맨 위에 있는 객체, 즉 Lamborghini를 제거하려면 pop() 함수를 사용하여 제거할 수 있습니다. 여기에 동일한 코드가 있습니다.

import java.util.Stack

fun main(args: Array<String>){

    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
    cars.push("Lamborghini")

    for(c in cars){
        println(c)
    }

    var poppedCar = cars.pop()
    println("\nThe car brand that is popped out is: " + poppedCar)
    println("\nThe new list of car brands is: ")

    for(c in cars){
        print(c + ", ")
    }

}

출력:

kotlin에서 스택 데이터 구조 사용 - 출력 3

Kotlin 스택의 peek() 함수

peek() 함수를 사용하면 Kotlin 스택을 엿볼 수 있습니다. 그것은 우리가 그것을 제거하지 않고 스택의 맨 위에 있는 객체를 찾을 수 있다는 것을 의미합니다.

아래 예제는 peek() 함수를 보여줍니다. 다음으로 자동차 브랜드 Lamborghini를 스택에 추가하고 peek() 함수를 사용하여 인쇄합니다.

import java.util.Stack

fun main(args: Array<String>){

    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
    cars.push("Lamborghini")

    for(c in cars){
        println(c)
    }

    var peekCar = cars.peek()
    println("\nPeeked Car is: " + peekCar)

}

출력:

kotlin에서 스택 데이터 구조 사용 - 출력 4

Kotlin Stack의 search() 함수

스택에서 특정 요소를 검색하려면 search() 기능을 사용할 수 있습니다. 스택에 있는지 여부가 확실하지 않은 경우 개체를 검색할 수도 있습니다.

검색된 요소가 스택에서 사용 가능한 경우 함수는 스택에서 해당 요소가 있는 번호를 반환합니다. 그러나 요소를 사용할 수 없는 경우 -1을 반환합니다.

car 스택에서 두 개의 자동차 브랜드를 검색하는 이 예를 살펴보겠습니다. FerrariJeep 요소를 찾습니다.

import java.util.Stack

fun main(args: Array<String>){

    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
    cars.push("Lamborghini")

    for(c in cars){
        println(c)
    }

    println("\nLooking for Ferrari: " + cars.search("Ferrari"))
    println("Looking for Jeep: " + cars.search("Jeep"))

}

출력:

kotlin에서 스택 데이터 구조 사용 - 출력 5

위의 출력에서 첫 번째 search() 함수는 Ferrari가 3rd 위치에 있으므로 3을 반환했습니다. 그러나 두 번째 search() 함수는 Jeep이 스택에 없기 때문에 -1을 반환합니다.

Kotlin 스택의 isEmpty() 함수

빈 스택에서 일부 기능을 수행하려고 하면 오류가 발생합니다. 예를 들어 빈 스택에서 pop() 함수를 사용하면 java.util.EmptyStackException이 발생합니다.

import java.util.Stack

fun main(args: Array<String>){

    var cars = Stack<String>();
    cars.addAll(listOf())
    var v = cars.pop()

}

출력:

kotlin에서 스택 데이터 구조 사용 - 출력 6

따라서 스택이 비어 있는지 여부를 아는 것이 중요합니다. 아래와 같이 isEmpty() 함수를 사용하여 알 수 있습니다.

import java.util.Stack

fun main(args: Array<String>){

    var cars = Stack<String>();
    cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche", "Lamborghini"))

    if(cars.isEmpty()){
        println("This stack is empty")
    }
    else{
        println("This stack is not empty")
    }
}

출력:

kotlin에서 스택 데이터 구조 사용 - 출력 7

Kotlin에서 ArrayDeque() 사용

스택은 유용한 데이터 구조이지만 Kotlin에서는 사용하지 않는 것이 좋습니다. 대신 Deque를 사용하는 것이 좋습니다. Deque는 큐와 스택으로 모두 작동할 수 있는 양방향 큐를 의미합니다.

kotlin.collections.ArrayDeque는 Kotlin 1.3.70에서 도입되었습니다. Kotlin 스택 대신 Deque를 사용하여 스택과 동일한 작업을 수행하는 방법은 다음과 같습니다.

import java.util.ArrayDeque

fun main(args: Array<String>){

    var stackExample = ArrayDeque<String>()
    stackExample.push("Mercedes-Benz")
    stackExample.push("BMW")
    stackExample.push("Ferrari")
    stackExample.push("Porsche")
    println(stackExample)
    println("\n" + stackExample.isEmpty())

    println("\n" + stackExample.pop())
    println("\n" + stackExample)

    stackExample.push("Lamborghini")
    println("\n" + stackExample)

}

출력:

kotlin에서 스택 데이터 구조 사용 - 출력 8

Kailash Vaviya avatar Kailash Vaviya avatar

Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.

LinkedIn