Kotlin에서 범위 지정 함수 사용

Kailash Vaviya 2024년2월15일
  1. Kotlin의 범위 함수
  2. Kotlin에서 범위 함수 사용
  3. Kotlin에서 also 범위 기능 사용
  4. Kotlin에서 let 스코프 기능 사용
  5. Kotlin에서 적용 범위 기능 사용
  6. Kotlin에서 run 범위 기능 사용
  7. Kotlin에서 with 스코프 기능 사용
Kotlin에서 범위 지정 함수 사용

이 기사에서는 Kotlin의 범위 기능 also에 대해 설명합니다. Kotlin에서 사용할 수 있는 다른 범위 기능도 살펴보겠습니다.

그러나 먼저 범위 기능이 무엇인지 이해합시다.

Kotlin의 범위 함수

Kotlin에는 객체 컨텍스트에서 코드를 실행하기 위해 만들어진 많은 기능이 있습니다. 이러한 기능을 범위 기능이라고 합니다.

범위 함수는 람다 식으로 호출할 때 개체에 대한 임시 범위를 만듭니다. Kotlin에는 also, let, apply, run, with의 5가지 범위 기능이 있습니다.

Kotlin의 모든 범위 함수는 동일한 기능을 수행하지만 다른 점은 실행 후 해당 블록 내부의 객체를 사용할 수 있는 방법입니다. 반환 값과 개체 참조를 기반으로 다섯 가지 범위 함수 중 하나를 선택해야 합니다.

아래 표는 각 범위 함수의 객체 참조 및 반환 값을 보여줍니다.

범위 기능 개체 참조 반환 값 확장 기능
also it 람다 값 확장 기능입니다.
let this 람다 값 확장 기능입니다.
apply - 람다 값 확장 기능이 아닙니다.
run this 람다 값 확장 기능이 아닙니다.
run this 컨텍스트 개체 확장 기능입니다.
with it 컨텍스트 개체 확장 기능입니다.

Kotlin에서 범위 함수 사용

아래 예제는 Kotlin에서 범위 함수를 사용하는 방법을 보여줍니다. 이 코드에서 let 함수를 사용하여 Students 개체의 범위를 만듭니다.

data class Student(var firstName: String, var lastName: String, var age: Int, var address: String) {
    fun moving(newAddress: String) { address = newAddress }
    fun ageIncrease() { age++ }
}

fun main() {
    Student("David", "Miller", 24, "New York").let {
        println(it)
        it.moving("Chicago")
        it.ageIncrease()
        println(it)
    }
}

출력:

Kotlin의 범위 기능 사용

범위 함수는 출력에서 ​​Student 개체를 it으로 참조합니다. scope 함수를 사용하지 않았다면 새로운 변수를 선언하고 접근하기 위해 Student 객체의 값으로 초기화해야 했을 것입니다.

Kotlin에서 also 범위 기능 사용

위의 표에서 언급했듯이 Kotlin의 also 함수는 컨텍스트 객체를 인수(it)로 제공합니다. 컨텍스트 객체를 함수의 인수로 취하는 작업을 수행해야 할 때 also을 사용할 수 있습니다.

Kotlin에서 also을 사용하는 또 다른 좋은 방법은 속성이나 기능이 아닌 객체 자체에 대한 직접적인 참조가 필요한 경우입니다. Kotlin의 also 기능을 이해하려면 아래 예를 살펴보세요.

fun main() {
    val numList = mutableListOf("one", "three", "five")
    numList
        .also { println("Elements in the list before adding a new one: $it") }
        .add("seven")
        println("Elements in the list after adding a new one: " + numList)
}

출력:

Kotlin에서 범위 기능도 사용

Kotlin에서 let 스코프 기능 사용

Kotlin의 let 범위 함수는 컨텍스트 객체를 it 인수로 제공합니다. 반환 값은 람다 실행의 결과입니다.

let 함수를 사용하여 여러 함수를 호출하여 호출 체인의 결과를 누적할 수 있습니다.

fun main() {
    val numList = mutableListOf("one", "three", "five", "seven", "nine")
    val resList = numList.map { it.length }.filter { it > 3 }
    println(resList)
}

출력:

[5,4,5,4]

위의 예에서 resList를 사용하는 대신 let 범위 기능을 사용하여 람다 결과를 인쇄할 수 있습니다.

fun main() {
    val numList = mutableListOf("one", "three", "five", "seven", "nine")
    numList.map { it.length }.filter { it > 3 }.let{
        println(it)
        //We can add more functions here
    }
}

출력:

[5,4,5,4]

코드에 기능이 하나만 있는 경우 람다(it)를 메서드 참조 기호(::)로 바꿀 수 있습니다.

fun main() {
    val numList = mutableListOf("one", "three", "five", "seven", "nine")
    numList.map { it.length }.filter { it > 3 }.let(::println)
}

출력:

[5,4,5,4]

Kotlin에서 적용 범위 기능 사용

Kotlin에서 apply 기능을 사용할 때(this) 컨텍스트 개체를 수신기로 사용할 수 있습니다. 반환 값이 없는 코드 블록에 apply 기능을 사용할 수 있습니다.

가장 일반적인 사용 사례는 개체 구성 중입니다. Student 개체를 생성한 다음 구성하는 아래의 예를 고려하십시오.

data class Student(var Name: String, var age: Int = 0, var address: String = "")

fun main() {
    val david = Student("David Miller").apply {
        age = 24
        address = "New York"
    }
    println(david)
}

출력:

Kotlin에서 적용 범위 기능 사용

Kotlin에서 run 범위 기능 사용

Kotlin에서 run 기능을 사용하는 동안 컨텍스트 객체를 수신자(this)로 얻습니다. 람다 실행 결과 자체가 이 범위 함수의 반환 값입니다.

run 함수는 람다에 개체 초기화와 반환 값 계산이 모두 있을 때 가장 유용합니다.

class port(var url: String, var portNum: Int) {
    fun initialRequest(): String = "Initial default request"
    fun res(request: String): String = "This is the result of query '$request'"
}

fun main() {

    val portService = port("https://example.kotlinlang.org", 80)

    val finalResult = portService.run {
        portNum = 8080
        res(initialRequest() + " to port $portNum")
    }
    // the same code written with let() function:
    val letResult = portService.let {
        it.portNum = 8080
        it.res(it.initialRequest() + " to port ${it.portNum}")
    }
    println(finalResult)
    println(letResult)
}

출력:

Kotlin에서 실행 범위 기능 사용

Kotlin에서 비확장 함수로 run을 사용할 수도 있습니다. 즉, 표현식이 필요한 명령문 블록을 실행합니다.

fun main() {
    val hexNum = run {
        val dig = "0-9"
        val hexDig = "A-Fa-f"
        val indication = "+-"
        Regex("[$indication]?[$dig$hexDig]+")
    }
    for (match in hexNum.findAll("+139 -ABFF 79")) {
        println(match.value)
    }
}

출력:

+139
-ABFF
79

Kotlin에서 with 스코프 기능 사용

with 기능은 run과 같은 비확장 기능이기도 합니다. with 함수가 있는 것은 인수로 전달되지만 수신자로 사용할 수 있다는 것입니다.

with는 람다 결과를 제공하고 싶지 않은 컨텍스트 개체에서 함수를 호출하는 데 가장 잘 사용됩니다.

fun main() {
    val num = mutableListOf("one", "three", "five", "seven")
    with(num) {
        println("The function 'with' is called with argument $this")
        println("The function contains $size items")
    }
}

출력:

Kotlin에서 범위 기능과 함께 사용

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

관련 문장 - Kotlin Function