1. 정의
2. apply
3. also
4. let
5. with
6. run
언어마다 각자 특색의 lamda 함수가 있다. 이번 글에서는 5개의 lamda 함수가 kotlin에서 어떻게 사용되는지 알아보자
1. 정의
inline fun <T, R> with(receiver: T, block: T.() -> R): R {
return receiver.block()
}
inline fun <T> T.also(block: (T) -> Unit): T {
block(this)
return this
}
inline fun <T> T.apply(block: T.() -> Unit): T {
block()
return this
}
inline fun <T, R> T.let(block: (T) -> R): R {
return block(this)
}
inline fun <T, R> T.run(block: T.() -> R): R {
return block()
}
정의에서 보면 5개 함수가 거의 비슷한것을 알 수 있다. 그럼 실제 사용 예제를 통해 사용하는 경우에 대해 알아보자. 아래 다룰 내용은 kotlin 오피셜에서 권장하는 내용이다.
2. apply
함수 내부에서 수신 결체에 대하여 수정해야 할 경우에 사용
val peter = Person().apply {
name = "Pet"
age = 19
}
3. also
수신 격체를 변경하지 않고 내용만 사용할 때 주로 사용합니다. 예를 들어 print 혹은 객체 속성 체크 등등 있습니다.
class Book(author: Person) {
val author = author.also {
requireNotNull(it.age)
print(it.name)
}
}
4. let
null 값이 아닌경우 실행할 코드가 있을경우 많이 사용한다.
getNullablePerson()?.let {
promote(it)
}
5. with
결과가 필요하지 않을경우 사용한다. 즉 수신 객체를 사용만 할 경우
val person: Person = getPerson()
with(person) {
print(name)
print(age)
}
6. run
계산에 필요한 값들을 임시로 사용하고 사용범위를 제한하려고 할때 사용된다.
val inserted: Boolean = run {
val person: Person = getPerson()
val personDao: PersonDao = getPersonDao()
personDao.insert(person)
}
여기까지 kotlin의 람다식의 사용법에 대해 알아 보았는데요. 정리는 했지만 체감은 되지 않네요. 추후 프로젝트 적용 시에 다시 한번 정리하는걸로 합시다.
reference:
코틀린 의 apply, with, let, also, run 은 언제 사용하는가?
원문 : “Kotlin Scoping Functions apply vs. with, let, also, and run”
medium.com
'Kotlin' 카테고리의 다른 글
[kotlin] Serialization을 이용하여 JSON를 다루어 보자 (0) | 2022.01.20 |
---|---|
[Kotlin] foreach 와 map 알고 쓰자 (0) | 2022.01.12 |
[kotlin] Collection & Sequence (0) | 2021.11.23 |
[kotlin] 자주 사용하는 문법 정리 (0) | 2021.11.23 |
Comment