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
다음 코드 스니펫은 let
과 also
를 구별하는 좋은 예를 보여줍니다.
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 표준 함수가 함수 내에서 변수를 변경하거나 개체를 수정하는 전부입니다.