안녕하세요 아주 오랜만입니다
약간의 휴식기를 갖고 왔습니다 :)
CoroutineBuilder에 관해선, 이전 포스팅에도 있기 때문에, 간단한 예제를 통해 복습하겠습니다
간단한 예제지만, 코루틴을 처음 접하기 때문에 쉬운 예제부터 시작해 천천히 개념을 명확히 알아보려합니다 🙇🏻♀️
2022.08.30 - [💻 프로그래밍] - [🔥Coroutine] # 1 Coroutine을 배워봅시다
1. runBlocking
runBlocking 내의 코드가 완료되기 전까지 mainThread를 종료시키지 않음 -> 동시성이 깨짐
다른 코루틴의 Thread를 중지할 수도 있기 때문에 주로 테스트코드 작성시에 많이 쓰임
테스트 코드를 살펴보겠습니다
@Test
fun testRunBlock() = runBlocking {
val time = measureTimeMillis {
val name = getName()
val lucky = getLuckyNum()
println("$name's Lucky Number : $lucky")
}
println("Running Time: $time")
}
suspend fun getName() : String {
delay(2000)
return "아이브"
}
suspend fun getLuckyNum() : Int {
delay(3000)
return Random().nextInt(100)
}
몇초가 소요될 것 같나요 ? 🔍
🔑 코드가 완료되기 전까지 mainThread를 종료하지 않음에 포인트를 둬야합니다
그러므로 위 예제 실행완료까지는 약 5초의 시간이 걸립니다 😞
이름을 얻고 (2초) ➡️ 행운의 숫자를 얻고 (3초)
2. async
Deferred<T> 형태로 결과를 반환하는 CoroutineBuilder
await로 처리해서 값 반환까지 대기 가능
@Test
fun testAsync() = runBlocking {
val time = measureTimeMillis {
val name = async { getName() }
val num = async { getNumber() }
println("Hi, ${name.await()} ${num.await()}")
}
println("time: $time")
}
suspend fun getName(): String {
delay(3000)
return "아이브"
}
suspend fun getNumber(): Int {
delay(2000)
return Random().nextInt(100)
}
이름을 얻고 행운의 숫자를 가져오는 과정이 🔑 병렬로 진행되기에, 3초가 소요됩니다
패스트캠퍼스 강의를 참고했어요 :)
'💻 프로그래밍' 카테고리의 다른 글
[🔥Coroutine] #4 suspend, Job 간단하게 살펴보기 (0) | 2022.11.30 |
---|---|
[🔥 Coroutine] #3 예제로 복습하기 (0) | 2022.11.12 |
[🔥Coroutine] # 1 Coroutine을 배워봅시다 (0) | 2022.08.30 |
[RxJava] #5 Operators(3) 필터링, 결합 연산자 (0) | 2022.08.22 |
[RxJava] #4 Operators(2) 변형연산자 (0) | 2022.08.14 |