코루틴
- 한 스레드에서 실행을 일시 중단하고 다른 스레드에서 재개
 - 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 |