웹사이트 검색

Kotlin let, run, also, apply, with


이 튜토리얼에서는 Kotlin에서 사용할 수 있는 몇 가지 중요한 표준 라이브러리 기능을 구현합니다. kotlin-stdlib는 관용적 패턴을 구현하는 유용한 고차 함수를 제공합니다. Kotlin으로 프로그래밍을 더 쉽고 빠르게 만드는 방법을 살펴보겠습니다. 아래에서 논의할 기능은 다음과 같습니다.

  • 하자
  • 실행
  • 또한
  • 적용
  • 와 함께

코틀린 렛

let는 호출된 개체를 매개변수로 사용하고 람다 식의 결과를 반환합니다. Kotlin let은 표현식 내부에서 선언된 변수를 외부에서 사용할 수 없는 범위 지정 함수입니다. kotlin let 함수를 보여주는 예시는 다음과 같습니다.

fun main(args: Array<String>) {
    var str = "Hello World"
    str.let { println("$it!!") }
    println(str)

}
//Prints
//Hello World!!
//Hello World

it 키워드는 let 내부 속성의 복사본을 포함합니다. let의 마지막 값은 아래와 같이 인수로 반환됩니다.

var strLength = str.let { "$it function".length }
println("strLength is $strLength") //prints strLength is 25

let 함수 연결

var a = 1
var b= 2

a = a.let { it + 2 }.let { val i = it + b
        i}
println(a) //5

네스팅 렛

아래와 같이 다른 let 표현식 안에 let 표현식을 설정할 수 있습니다.

var x = "Anupam"
x.let { outer -> outer.let { inner -> print("Inner is $inner and outer is $outer") } }

//Prints
//Inner is Anupam and outer is Anupam

중첩된 let의 경우 it 키워드를 사용할 수 없습니다. 두 let 함수 모두에서 it에 명시적인 이름을 지정해야 합니다. 가장 바깥쪽 let만 아래와 같이 값을 반환합니다.

var x = "Anupam"
    x = x.let { outer ->
        outer.let { inner ->
            println("Inner is $inner and outer is $outer")
            "Kotlin Tutorials Inner let"
        }
        "Kotlin Tutorials Outer let" 
    }
    println(x) //prints Kotlin Tutorials Outer let

null 검사를 허용

또한 let은 아래와 같이 Nullable 속성을 확인하는 데 유용합니다.

var name : String? = "Kotlin let null check"
name?.let { println(it) } //prints Kotlin let null check
name = null
name?.let { println(it) } //nothing happens

let 식 내부의 코드는 속성이 null이 아닌 경우에만 실행됩니다. 따라서 let은 if else null 검사기에서도 우리를 구해줍니다!

코틀린 실행

Kotlin run은 또 다른 흥미로운 기능입니다. 다음 예제는 사용 사례를 보여줍니다.

var tutorial = "This is Kotlin Tutorial"
    println(tutorial) //This is Kotlin Tutorial
    tutorial = run {
        val tutorial = "This is run function"
        tutorial
    }
    println(tutorial) //This is run function

  • let 함수와 마찬가지로 run 함수도 마지막 문장을 반환합니다.
  • let과 달리 run 함수는 it 키워드를 지원하지 않습니다.

실행하자

let과 run 함수를 함께 결합해 봅시다.

var p : String? = null
    p?.let { println("p is $p") } ?: run { println("p was null. Setting default value to: ")
        p = "Kotlin"}

    println(p)
//Prints
//p was null. Setting default value to: 
//Kotlin

코틀린도

이름에서 알 수 있듯이 또한 식은 호출된 개체에 대해 일부 추가 처리를 수행합니다. let과 달리 새 반환 데이터 대신 원래 개체를 반환합니다. 따라서 반환 데이터는 항상 동일한 유형을 갖습니다. let과 마찬가지로 또한it를 사용합니다.

var m = 1
m = m.also { it + 1 }.also { it + 1 }
println(m) //prints 1 

Kotlin let vs also

다음 코드 스니펫은 letalso를 구별하는 좋은 예를 보여줍니다.

data class Person(var name: String, var tutorial : String)
var person = Person("Anupam", "Kotlin")

var l = person.let { it.tutorial = "Android" }
var al = person.also { it.tutorial = "Android" }
    
println(l)
println(al)
println(person)

코틀린 적용

Kotlin apply는 유형의 확장 기능입니다. 객체 참조(수신자라고도 함)에서 식으로 실행되고 완료 시 객체 참조를 반환합니다.

data class Person(var name: String, var tutorial : String)
var person = Person("Anupam", "Kotlin")

person.apply { this.tutorial = "Swift" }
println(person)

적용하다 vs 또한

data class Person(var n: String, var t : String)
var person = Person("Anupam", "Kotlin")

person.apply { t = "Swift" }
println(person)

person.also { it.t = "Kotlin" }
println(person)

코틀린

적용과 마찬가지로 with는 매번 참조에 대해 점 연산자를 호출할 필요 없이 인스턴스 속성을 변경하는 데 사용됩니다.

data class Person(var name: String, var tutorial : String)
var person = Person("Anupam", "Kotlin")

with(person)
    {
        name = "No Name"
        tutorial = "Kotlin tutorials"
    }

Kotlin 적용 대 사용

  • with는 개체(수신자) 없이 실행되지만 적용에는 개체가 필요합니다.
  • apply는 개체 참조에서 실행되는 반면 with는 인수로 전달합니다.
  • with 함수의 마지막 표현식은 결과를 반환합니다.

var xyz = with(person)
    {
        name = "No Name"
        tutorial = "Kotlin tutorials"
        val xyz = "End of tutorial"
        xyz
    }
    println(xyz) //End of tutorial

이것이 Kotlin 표준 함수가 함수 내에서 변수를 변경하거나 개체를 수정하는 전부입니다.