본문 바로가기
Blog/TIL

2025-03-20 (목)

by 코젼 2025. 3. 20.
728x90
반응형

🚀 오늘 배운 것

  • isNotEmpty()는 길이 체크, isNotBlank()는 공백 여부까지 체크.
  • launch는 단순 실행, async는 await()로 결과 반환 가능.
  • runBlocking은 스레드 차단, CoroutineScope는 비동기 실행.

🔹 isNotEmpty() vs isNotBlank()

Method 대상 동작 방식

isNotEmpty() String & Collection 문자열 또는 컬렉션이 비어있지 않으면 true
isNotBlank() String 공백(' ', '\\\\t', '\\\\n')을 제외한 문자가 하나라도 있으면 true

📌 예제

val str1 = "  "
val str2 = "abc"

println(str1.isNotEmpty()) // true
println(str1.isNotBlank()) // false

println(str2.isNotEmpty()) // true
println(str2.isNotBlank()) // true

✅ isNotEmpty()는 단순히 길이(0 초과)를 체크하지만, isNotBlank()는 공백만 있는 경우도 false를 반환함.

🔹 async vs launch

기능 async launch

반환값 Deferred<T> (결과를 반환) Job (결과 없음)
실행 방식 병렬 실행 + await()로 결과 반환 병렬 실행 후 결과 기다리지 않음
예외 처리 await() 시 예외 발생 내부에서 바로 예외 발생

📌 예제

suspend fun example() {
    val scope = CoroutineScope(Dispatchers.IO)

    val job = scope.launch {
        println("Launch 실행")
    }

    val deferred = scope.async {
        println("Async 실행")
        "결과값"
    }

    job.join() // 단순 실행 후 종료 기다림
    println(deferred.await()) // "결과값" 출력
}

✅ launch는 단순히 수행만 하고 결과를 반환하지 않음.

✅ async는 Deferred를 반환하며, await()을 호출해야 결과를 얻을 수 있음.

🔹 runBlocking vs CoroutineScope

기능 runBlocking CoroutineScope

동작 방식 현재 스레드를 차단 (Blocking) 비동기 실행 (Non-blocking)
사용 목적 main() 등 최상위에서 코루틴 호출 시 비동기 코드 실행을 위한 컨테이너
성능 영향 메인 스레드 블로킹 메인 스레드 유지

📌 예제

fun main() {
    runBlocking {
        println("runBlocking 시작")
        delay(1000)
        println("runBlocking 끝")
    }
    println("메인 종료")
}

fun main() {
    val scope = CoroutineScope(Dispatchers.Default)
    scope.launch {
        delay(1000)
        println("CoroutineScope 실행")
    }
    println("메인 종료")
    Thread.sleep(1500) // 메인 종료를 방지하기 위해 추가
}

✅ runBlocking은 스레드를 차단하여 내부 코드가 완료될 때까지 기다림.

✅ CoroutineScope는 비동기 실행을 제공하며 메인 스레드를 차단하지 않음.

728x90
반응형

'Blog > TIL' 카테고리의 다른 글

2025-03-18 (화)  (2) 2025.03.18
2025-03-14 (금)  (0) 2025.03.14
2025-03-13 (목)  (0) 2025.03.13
2025-03-11 (화)  (1) 2025.03.11
2025-03-10 (월)  (1) 2025.03.10

댓글