인프런 커뮤니티 질문&답변
yield 함수가 없어도 결과가 동일한 이유가 뭔가요?
해결된 질문
작성
·
469
답변 1
0
최태현
지식공유자
안녕하세요 파이팅해야지님! 질문 주셔서 감사합니다! 🙂
핵심 적인 부분은 yield() 2개를 동시에 지운다는 점이에요!
fun main(): Unit = runBlocking {
println("START")
launch {
newRoutine()
}
yield() // 1번, yield를 제거한다면?!
println("END")
}
suspend fun newRoutine() {
val num1 = 1
val num2 = 2
yield() // 2번, yield를 제거한다면?!
println("${num1 + num2}")
}이 경우는 다음과 같이 동작합니다.
main함수가 실행되고launch를 이용해 새로운 코루틴이 시작! (되었으나 해당 코루틴이 즉시 실행되지는 않는다)따라서 launch 아래의 1번
yield로 넘어옴yield에 의해 main 루틴이 실행을 new 루틴에게 양보newRoutine함수로 넘어와 변수 선언 이후 다시 2번 yield가 실행yield에 의해 다시 main 루틴으로 넘어와 END 출력main 루틴이 종료되었으므로
newRoutine으로 넘어와println출력
그리고 yield()를 함께 지우면 아래와 같은 코드가 되는데요!
fun main(): Unit = runBlocking {
println("START")
// 새로운 코루틴 시작!
launch {
newRoutine()
}
println("END")
}
suspend fun newRoutine() {
val num1 = 1
val num2 = 2
println("${num1 + num2}")
}이때 새로운 코루틴을 launch로 시작한다고 해서 반드시 해당 코루틴이 먼저 실행되는게 아닙니다.
따라서 이 경우는 아래와 같이 동작합니다!
main함수가 실행되고launch를 이용해 새로운 코루틴이 시작! (되었으나 해당 코루틴이 즉시 실행되지는 않는다)따라서 main 함수의 END를 출력
main 루틴이 종료되었으므로
newRoutine으로 넘어와println출력
답변이 도움이 되었으면 좋겠습니다. 감사합니다!! 🙇






아 yield 함수가 없으면 그냥 처음 시작된 코루틴을 그대로 진행하고 그게 끝나면 도중에 시작된 코루틴이 이어서 시작되는거군요! 친절한 답변 감사드립니다^^