코루틴
- 한 스레드에서 실행을 일시 중단하고 다른 스레드에서 재개
- suspend function은 일반 함수처럼 코루틴 내부에서 사용될 수 있는 함수
fun main() {
runBlocking {
launch {
doWorld()
}
println("Hello")
}
}
private suspend fun doWorld() {
delay(1000L) // suspend가 없다면 delay는 실행될 수 없다.
println("World!")
}
Scope funcions
- 대상 객체에 대한 임시적인 스코프를 형성하여 해당 객체에 접근 가능.
- let
- 객체 참조 : it
- ?.let 을 활용하여 해당 객체가 null이 아닐때만 코드 블럭 실행
fun main() {
var nullableStr: String? = "Hello"
val length = nullableStr?.let {
println(it)
it.length
}
}
- with
- 객체 참조 : this , 확장 함수 x
- this 로 객체를 참조하기 때문에 함수를 호출할 때 적절
fun main() {
with("hello") {
println("$length")
}
}
- run
- 객체 참조: this
- with 와 동일하지만 확장 함수이다.
- 객체 초기화와 반환 값 계산이 동시에 수행 될 때
class MultiPortService(var url: String, var port: Int) {
fun prepareRequest(): String = "Default request"
fun query(request: String): String = "Result for query '$request'"
}
val service = MultiPortService("https://example.kotlinlang.org", 80)
val result = service.run {
port = 8080
query(prepareRequest() + " to port $port")
}
// the same code written with let() function:
val letResult = service.let {
it.port = 8080
it.query(it.prepareRequest() + " to port ${it.port}")
}
- apply
- 객체 참조 : this
data class Person(var name: String, var age: Int = 0, var city: String = "")
fun main() {
val adam = Person("Adam").apply {
age = 32
city = "London"
}
}
- also
- 객체 참조: it
fun main() {
val stringNumbers = listOf(1, 2, 3)
.also { println(it) }
.map { it.toString() }
}
'안드로이드' 카테고리의 다른 글
[코틀린] 이미지 로딩 라이브러리 Glide vs Picasso (0) | 2022.09.29 |
---|---|
[코틀린] 코틀린 - 타입 시스템 (0) | 2022.09.28 |
[코틀린] 코틀린 기초 - 3 (0) | 2022.09.26 |
[코틀린] 코틀린 기초 - 2 (0) | 2022.09.25 |
[코틀린] 코틀린 기초 (0) | 2022.09.24 |