Suspend fun

BongKu·2023년 7월 31일
0

Android

목록 보기
16/30
post-thumbnail

Suspend fun 이란 ?

Susepnd ->'정지하다' , 즉 Suspend fun 이란 정지할 수 있는 함수라는 것입니다. 이 함수가 호출될 때는 기존에 진행하던 함수는 정지하게 됩니다.

Suspend 함수는 Coroutine 함수 안에서 동작하고, 이 함수가 호출되면 진행중이던 Coroutine 이 Suspend 함수가 끝날 때까지 정지하게 됩니다.

하지만, Suspend 함수는 자신을 호출한 Coroutine의 Context 에서 동작하므로, 해당 스레드를 정지하는 것이고 다른 스레드는 계속 동작하게 됩니다.

예시

간단한 예시를 보도록 하겠습니다.

suspend fun fetchUserData(userId: String): String {
    println("Fetching user data for user ID: $userId")
    delay(2000) 
    return "User data for user ID: $userId"
}

fun main() {
    val job = GlobalScope.launch {
        println("Start of coroutine")
        
        val userData = fetchUserData("12345")
        println(userData)

        println("End of coroutine")
    }
    
    println("Main thread continues")
    
    runBlocking {
        job.join()
    }
}

위 코드의 fetchUserdata 는 suspend 함수로 userId를 화면에 보여주고, 값을 리턴합니다.

메인 함수에서는 GlobalScope 내에서 fetchUserData를 호출하고 있고, 메인 스레드에서는 화면에 Main thread 라는 것을 보여주는 문구를 출력합니다.

마지막으로 메인스레드가 종료되서 코루틴 내부가 동작하는 중에 끝나는 것을 방지하기 위해 runBlocking 함수를 사용해서 메인 스레드가 코루틴이 완료될 때까지 대기하도록 만들어줍니다.

위 코드를 실행한 결과는 다음과 같습니다

Main thread continues
Start of coroutine
Fetching user data for user ID: 12345
User data for user ID: 12345
End of coroutine

이처럼 코루틴 내에서 동작하는 suspend 함수를 사용하면 해당 함수를 호출한 코루틴을 일시 정지하고 해당 함수가 끝날 때까지 기다리게되어 순차적인 실행을 보장할 수 있습니다.

profile
화이팅

0개의 댓글