Coroutine
[Coroutine Basics 1] Routine과 Coroutine의 개념과 예시
xiaolin219
2024. 1. 11. 18:08
개념
- Routine : 프로그래밍에서 루틴은 특정한 일을 처리하기 위한 일련의 명령이다.
- Sub-Routine : 함수 안에 함수가 있을 경우, 안쪽의 함수를 Sub-Routine이라 한다.
- Co-Routine
- co : 함께 수행되는
- routine : 함수(Routine)
루틴이랑 코루틴 그래서 뭐가 다른데?
아래와 같이 main() 함수와 test()라는 함수가 있다고 해보자.
루틴 예시와 설명
// Routine, Sub-Routine ver.
// START, test, END 순으로 출력
fun main(){
println("START")
test()
println("END")
}
fun test(){
println("test")
}
- 일반적으로 생각하는 동작 순서이다.
- 아래 이미지에서 Routine은 main() 함수에, subRoutine은 test() 함수에 대응된다.
- 굳이 포인트를 꼽자면 test()의 실행이 시작되면 완료될때까지 끊기지 않는다.
- 이후 main()에서 test()의 호출 지점 다음부터 실행 재개
코루틴 예시와 설명
// Coroutine ver.
// START, END, test 순으로 출력
fun main(): Unit = runBlocking {
println("START") // 1
launch {
test()
}
yield() // 2
println("END") // 5, 6
}
suspend fun test() {
// 3
yield() // 4
println("test") // 7
}
코루틴에서는 test()
함수의 실행 중단되었다가 다시 재개 가능하다. 이것이 코루틴과 루틴의 차이점이다.
그렇다면 routine작동 과정과 달리 어떻게 func test()
를 중단 및 재개 시킬까?
가장 먼저 main 함수에 runBlocking
과 같은 coroutine Scope을 열어서 새로운 코루틴을 생성해줌으로써 가능하다.
runBlocking의 내부에서 START를 출력 후 launch 블럭을 만나게 된다.
Launch 또한 새로운 코루틴을 만드는 코루틴 블럭에 해당한다
해당 코루틴을 시작하면 비동기적으로 작동하기 때문에 코루틴이 완료될때까지 기다리지 않고 'END' 메세지를 먼저 출력하게 된다.
출처
이미지 출처 : https://kotlinworld.com/214
코드 참고 : 2시간으로 끝내는 코루틴(인프런)