| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- coroutine
- KAKAO
- withContext
- coroutinescope
- monotone stack
- Product Flavor
- conflate
- 백준
- app-distribution
- Algorithm
- ServerDrivenUI
- 안드로이드
- coldStream
- Next Challenge
- google play console
- SDUI
- Kotlin
- Flow
- 릴리즈 키해시
- java
- Android
- collectLatest
- TOSS 과제
- 백준2309
- ShapeableImageView
- Advanced LCA
- cancellationException
- coroutinecontext
- flowon
- hotStream
Archives
- Today
- Total
루피도 코딩한다
[Coroutine Basics 1] Routine과 Coroutine의 개념과 예시 본문
개념
- 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시간으로 끝내는 코루틴(인프런)
'Coroutine' 카테고리의 다른 글
| [Coroutine Basics 6] Structured Concurrency, CoroutineScope, CoroutineContext (0) | 2024.01.22 |
|---|---|
| [Coroutine Basics 5] 코루틴의 예외 처리와 Job의 상태 변화 (1) | 2024.01.21 |
| [Coroutine Basics 4] Coroutine Cacelation (0) | 2024.01.19 |
| [Coroutine Basics 3] Coroutine Builder and Job (0) | 2024.01.18 |
| [Coroutine Basics 2] Android에서의 Thread와 Coroutine (0) | 2024.01.17 |
Comments