์ด์ Coroutine ๊ธ์ ์ด์ด ์ถ๊ฐ์ ์ผ๋ก ๊ธ์ ์ฐ๋ คํ๋ค.
์๋๋ก์ด๋์์ ์ฝ๋ฃจํด / Coroutine ์จ๋ด ์๋ค - 0
์ฝ๋ฃจํด์ด๋! ๋ป : ์ฝ๋ฃจํด(Coroutine)์ Co- Routine์ ํฉ์ฑ์ด์ธ๋ฐ Co(์ ๋ชฐ๋ผ์ ์๋ฌธ์ฌ์ ๋งํฌ๋ฅผ ๋ค๊ณ ์๋ค) - ํ๋, ํ๋ ฅ, ํจ๊ป co- 1. together; with: 2. abbreviation for company (= business): 3. writtenโฆ dictionary.cambridg
taekwon-seungwon.tistory.com
์ด๋ฒ์ ๋ฐฐ์ธ ์
- build.gradle ์ถ๊ฐ
- CoroutineScope
- Coroutine Dispatcher
- Coroutine ์ํ๊ด๋ฆฌ
- WithContext ๋์คํจ์ณ ๋ถ๋ฆฌ
- Coroutine ๋น๋
build.gradle ์ถ๊ฐ


์์ ๊ฐ์ด CoroutineScope๋ฅผ ํ์ดํ ํ์ ๋ ์๋์์ฑ์ด ๋จ๊ฒ๋๋ค๋ฉด ๋ฐ๋ก ์์กด์ฑ์ ์ถ๊ฐํ์ง ์์ผ์ ๋ ๋ฌด๋ฐฉํฉ๋๋ค.
CoroutineScope
์ฝ๋ฃจํด์ ์ฝ๋ฃจํด ์ค์ฝํ ์์์ ์คํ๋ฉ๋๋ค. ๋ชจ๋ ์ฝ๋ฃจํด์ ์ค์ฝํ ๋ด์์ ์คํ๋์ด์ผ ํ๋๋ฐ ์ด๋ฅผ ํตํด์ Activity or Fragment์ ์๋ช ์ฃผ๊ธฐ์ ๋ฐ๋ผ ์๋ฉธ๋ ๋ ๊ด๋ จ ์ฝ๋ฃจํด์ ํ ๋ฒ์ ์ทจ์ํ ์ ์๋๋ฐ ์ด๋ ๊ณง ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ์ค์ฝํ๋ ์ปค์คํ ๋๋ ์ด๋ฏธ ๋ด์ฅ๋ ๋ฒ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
CoroutineScope๋ ์ฌ์ค CoroutineContext ํ์ ํ๋๋ฅผ launch ๋ฑ์ ํ์ฅ ํจ์ ๋ด๋ถ์์ ์ฌ์ฉํ๊ธฐ ์ํ ๋งค๊ฒ์ฒด ์ญํ ๋ง ๋ด๋นํ๋ค.
CoroutineScope๋ GlobalScope, CoroutineScope, ViewModelScope๊ฐ ์กด์ฌํฉ๋๋ค.
GlobalScope(๊ธ๋ก๋ฒ ์ค์ฝํ) : ์ฑ์ ์๋ช ์ฃผ๊ธฐ์ ํจ๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์ ์คํ ๋์ค์ ๋ณ๋ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๊ฐ ํ์์๋ค. ์์~์ข ๋ฃ ๊น์ง ๊ธด์๊ฐ ์คํ๋๋ ์ฝ๋ฃจํด์ ๊ฒฝ์ฐ ์ ํฉํ๋ค.
CoroutineScope(์ฝ๋ฃจํด ์ค์ฝํ): ๋ฒํผ์ ๋๋ฌ ๋ค์ด๋ก๋ ํ๊ฑฐ๋ ์๋ฒ์์ ์ด๋ฏธ์ง๋ฅผ ์ด ๋ ๋ฑ, ํ์ํ ๋๋ง ์ด๊ณ ์๋ฃ๋๋ฉด ๋ซ์์ฃผ๋ ์ฝ๋ฃจํด ์ค์ฝํ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.

ViewModelScope(๋ทฐ๋ชจ๋ธ ์ค์ฝํ) : Jetpack ์ํคํ ์ณ์ ๋ทฐ๋ชจ๋ธ ์ปดํฌ๋ํธ ์ฌ์ฉ์ ViewModel ์ธ์คํด์ค์์ ์ฌ์ฉํ๊ธฐ ์ํด ์ ๊ณต๋๋ ์ค์ฝํ์ด๋ค. ํด๋น ์ค์ฝํ๋ก ์คํ๋๋ ์ฝ๋ฃจํด์ ViewModel ์ธ์คํด์ค๊ฐ ์๋ฉธ๋ ๋ ์๋์ผ๋ก ์ทจ์๋๋ค.

CoroutineScope์ ๊ฒฝ์ฐ GlobalScope์๋ ๋ฌ๋ฆฌ Dispatchers๋ฅผ ์ง์ ํ ์ ์๋๋ฐ ์ด๋ ์ฝ๋ฃจํด์ด ์คํ๋ ์ค๋ ๋๋ฅผ ์ง์ ํ๋ ๊ฒ์ด๋ค.
Coroutine Dispatcher(์ฝ๋ฃจํด ๋์คํจ์ณ)
Coroutine Dispatcher์ ๊ฒฝ์ฐ์๋ Default, IO, Main, Unconfined ๋ฑ์ด ์๋ค.
- Dispatchers.Default : ์๋๋ก์ด๋ ๊ธฐ๋ณธ ์ค๋ ๋ํ ์ฌ์ฉ, CPU๋ฅผ ๋ง์ด ์ฐ๋ ์์ ์ ์ต์ ํ (๋ฐ์ดํฐ ์ ๋ ฌ, ๋ณต์กํ ์ฐ์ฐ ๋ฑ)
- Dispatchers.IO : ์ด๋ฏธ์ง ๋ค์ด๋ก๋, ํ์ผ ์ ์ถ๋ ฅ ๋ฑ ์ ์ถ๋ ฅ์ ์ต์ ํ ๋์ด์๋ ๋์คํจ์ณ (๋คํธ์ํฌ, ๋์คํฌ, DB ์์ ์ ์ ํฉ)
- Dispatchers.Main : ์๋๋ก์ด๋ ๊ธฐ๋ณธ ์ค๋ ๋ ์์ ์ฝ๋ฃจํด ์คํ (UI์ ์ํธ์์ฉ์ ์ต์ ํ)
- Dispatchers.Unconfined : ํธ์ถํ Context๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋๋ฐ ์ค๋จ ํ ๋ค์ ์คํ๋ ๋ Context๊ฐ ๋ฐ๋๋ฉด ๋ฐ๋ Context๋ฅผ ๋ฐ๋ผ๊ฐ๋ ํน์ดํ ๋์คํจ์ณ
๋์คํจ์ณ๋ ์ฝ๋ฃจํด์ ์ ๋นํ ์ค๋ ๋์ ํ ๋นํ๋ฉฐ, ์ฝ๋ฃจํด ์คํ ๋์ค ์ผ์ ์ ์ง or ์คํ ์ฌ๊ฐ๋ฅผ ๋ด๋นํ๋ค.
Coroutine ์ํ๊ด๋ฆฌ
์ฝ๋ฃจํด์ launch, async๋ก ์์์ด ๊ฐ๋ฅํฉ๋๋ค. launch๋ ์ํ ๊ด๋ฆฌ async๋ ์ํ ๊ด๋ฆฌ + ๊ฒฐ๊ณผ ๋ฐํ์ ๋ด๋นํฉ๋๋ค.
์ฝ๋ฃจํด์ ์์ฑํ๊ณ ์ํ ๊ด๋ฆฌ ๋ฉ์๋๋ฅผ ํธ์ถํด์ ์ค๋จ, ์ง์ฐํ ์ ์์ต๋๋ค.
Cancel(์ค๋จ ๊ด๋ จ)
์ฝ๋ฃจํด์ ๋์์ ๋ฉ์ถ๋ ์ํ๊ด๋ฆฌ ๋ฉ์๋์ ๋๋ค. ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.

job ์์ job1 ์ฝ๋ฃจํด์ด ์๋ ๊ฒ์ด ๋ณด์ผํ ๋ฐ ์์ ์ฝ๋ฃจํด์ cancelํ๊ฒ๋๋ฉด ํ์ ์ฝ๋ฃจํด๋ ์ค๋จ๋ฉ๋๋ค.
Join(์์ฐจ ์คํ)
์ฝ๋ฃจํด ๋ด๋ถ์ ์ฌ๋ฌ launch ๋ธ๋ก์ด ์๋ ๊ฒฝ์ฐ ๋ชจ๋ ์๋ก์ด ์ฝ๋ฃจํด์ผ๋ก ๋ถ๊ธฐ๋์ด ๋์ ์คํ ๋๊ธฐ ๋๋ฌธ์ ์์๋ฅผ ์ ํ ์ ์๋ค.
์์๋ฅผ ์ ํด์ผํ๋ค๋ฉด ์๋์ฒ๋ผ join() ์ ์ฌ์ฉํด ์์ฐจ์ ์ผ๋ก ์คํ๋๋๋ก ์ฝ๋๋ฅผ ์งค ์ ์๋ค.

ํ๋ฐ ์๋์ ๊ฐ์ด ๋๋ค๋ฉด ๋ ๋ฒ์งธ launch์ ์ธ ๋ฒ์งธ launch๊ฐ ๊ฐ์ด ์คํ๋๋ค.


์ค๊ฐ launch๊ฐ ์คํ๋ ์ํ์์ ๋ง์ง๋ง launch๊ฐ join()์ด ๋ค์ด๊ฐ๋ค๊ณ ํด๋ ์์๋ฅผ ์งํค์ง ๋ชปํ๋ ์ ์ฌ์ฉํ์ฌ์ผํ๋ค.
async(๊ฒฐ๊ณผ ๋ฐํ)
async๋ก ์ฝ๋ฃจํด ์ค์ฝํ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ์ธ ์ ์๋ค. ํนํ ์ฐ์ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ 2๊ฐ์ ๋คํธ์ํฌ ์์ ์ ๊ฒฝ์ฐ ๋ชจ๋ ์๋ฃ๋์์ ๋ ์คํ๋์ผ ํ๋ค๋ฉด async, await๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.

WithContext ๋์คํจ์ณ ๋ถ๋ฆฌ
suspend function์ ์ฝ๋ฃจํด ์ค์ฝํ์์ ์ฌ์ฉํ ๋ ํธ์ถํ ์ค์ฝํ์ ๋ค๋ฅธ ๋์คํจ์ณ๋ฅผ ์ฌ์ฉํด์ผํ ๋๊ฐ ์๋ค.
ํธ์ถ ์ชฝ ์ฝ๋ฃจํด์ ์๋ฒ์์ ํ์ผ IO๋ฅผ ํ๊ณ withContext๋ฅผ ์ฌ์ฉํด Dispatchers.Main(UI ์ ์ด)์ผ๋ก ๋์คํจ์ณ๋ฅผ ๋ณ๊ฒฝํด์ค๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ชจ์ ์ฝ๋ฃจํด ๋์คํจ์ณ๋ฅผ ์ฌ์ฉํ์ง๋ง withContext๋ก ๋์คํจ์ณ๋ฅผ ๋ฌ๋ฆฌ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.

Coroutine ๋น๋
์ฝํ๋ฆฐ์ ์ฝ๋ฃจํด ๋น๋์ ์ํ๋ ๋์์ ๋๋ค๋ก ๋๊ฒจ ์ฝ๋ฃจํด์ ์์ฑํ์ฌ ์คํํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์ฝ๋ฃจํด์์ ์ ๊ณตํ๋ ๋น๋๋ค
- launch : ํ์ฌ ์ค๋ ๋ ์ค๋จ ์์ด ์ฝ๋ฃจํด์ ์ฆ์ ์์ ์ํจ๋ค. ๊ฒฐ๊ณผ๋ฅผ ํธ์ถํ ์ชฝ์ ๋ฐํํ์ง ์๋๋ค.
- async : ํ์ฌ ์ค๋ ๋ ์ค๋จ ์์ด ์ฝ๋ฃจํด์ ์ฆ์ ์์ ์ํจ๋ค.ํธ์ถ ์ชฝ์์ await()๋ฅผ ํตํด ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์๋ค. ๋ณํ์ผ๋ก ์คํ๋ ํ์๊ฐ ์๋ ๋ค์์ ์ฝ๋ฃจํด์ ์ฌ์ฉํ ๋ ์ฌ์ฉ! async ๋น๋๋ suspend ํจ์ ๋ด๋ถ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- withContext : ๋ถ๋ชจ ์ฝ๋ฃจํด์ ์ํด ์ฌ์ฉ๋๋ Context์ ๋ค๋ฅธ Context์์ ์ฝ๋ฃจํด์ ์คํ ์ํฌ ์ ์๋ค. ์ฝ๋ฃจํด์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ๋ async ๋์ ์ ์ฉํ๊ฒ ์ธ ์ ์๋ค.
- coroutineScope : ๋ณํ์ผ๋ก ์คํ๋ ๋ค์์ ์ฝ๋ฃจํด์ suspend ํจ์๊ฐ ์์ ์ํค๊ณ ๋ชจ๋ ์ฝ๋ฃจํด์ด ์๋ฃ๋ ๋๋ง ์ด๋ค ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ ์ด์์ ์ด๋ค. ์ฌ๋ฌ ์ฝ๋ฃจํด ์ค ํ๋๋ผ๋ ์คํ์ ์คํจํ๋ฉด ๋ชจ๋ ๋ค๋ฅธ ์ฝ๋ฃจํด์ด ์ทจ์๋๋ค.
- supervisorScope : coroutineScope ๋น๋์ ๋น์ทํ๋ค. ๊ทธ๋ฌ๋ ํ ์ฝ๋ฃจํด์ด ์คํจํ๋๋ผ๋ ๋ค๋ฅธ ์ฝ๋ฃจํด์ด ์ทจ์๋์ง ์๋๋ค.
- runblocking : ์ฝ๋ฃจํด์ ์์์ํค๊ณ ์๋ฃ๋ ๋๊น์ง ํ์ฌ ์ค๋ ๋๋ฅผ ์ค๋จ ์ํจ๋ค. ์ฝ๋ฃจํด์ ์ทจ์ง์ ์ ๋ฐ๋. ์ฝ๋ ํ ์คํธ, ๋ ๊ฑฐ์ ์ฝ๋ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํตํฉ์ ์ ์ฉ. ๊ทธ ์ธ์๋ ์ฌ์ฉํ์ง ๋ง์.
๊ฒฐ๋ก
์ฝ๋ฃจํด์ ์๋๋ก์ด๋ ๊ฐ๋ฐํ๋ฉด์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด Rx์ ๊ฐ์ด ํ์ํ ๊ฒ์ด๊ธฐ์ ๊ณต๋ถ๋ฅผ ๊ณ์ํ๊ณ ํฌ์คํ ๋ ๊ณ์ ์ด์ด๋๊ฐ ๊ฒ์ด๋ค.
์ค์ ๋ก ์ฌ์ฉํ๋ฉด์ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋์ํ๋์ง ์ดํดํ๋๊ฒ ๋ ๋น ๋ฅด๋ค ์๊ฐ์ด ๋ค์ด ๋ง์ด ๋ถ๋ชํ๊ณ ์๋ฌ๋ ๋ด๋ณด๋ฉด์ ์ฌ์ฉํด๋ณผ ๊ณํ์ด๋ค.
'Development > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DI - Hilt์ ๊ดํ์ฌ (0) | 2023.07.10 |
---|---|
Thread์ ๊ดํ์ฌ ๋ง ์ ์ด๋ณด๊ธฐ (0) | 2023.04.11 |
๐ ์ฌ์ฉ์๋ค์ด ์ฑ์ ์ ์ ๋ชป ์ฐ๊ฒ ํ ์ ์๋? - Firebase Remote Config (0) | 2022.09.18 |
Databinding ์์ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ค์ ๊ฐ๊ณตํ ๊น? ๐ฝ (1) | 2022.09.18 |
๐ฆ Databinding์ ์ฐ๋ฉด์ - 2 (0) | 2022.09.08 |
์ด์ Coroutine ๊ธ์ ์ด์ด ์ถ๊ฐ์ ์ผ๋ก ๊ธ์ ์ฐ๋ คํ๋ค.
์๋๋ก์ด๋์์ ์ฝ๋ฃจํด / Coroutine ์จ๋ด ์๋ค - 0
์ฝ๋ฃจํด์ด๋! ๋ป : ์ฝ๋ฃจํด(Coroutine)์ Co- Routine์ ํฉ์ฑ์ด์ธ๋ฐ Co(์ ๋ชฐ๋ผ์ ์๋ฌธ์ฌ์ ๋งํฌ๋ฅผ ๋ค๊ณ ์๋ค) - ํ๋, ํ๋ ฅ, ํจ๊ป co- 1. together; with: 2. abbreviation for company (= business): 3. writtenโฆ dictionary.cambridg
taekwon-seungwon.tistory.com
์ด๋ฒ์ ๋ฐฐ์ธ ์
- build.gradle ์ถ๊ฐ
- CoroutineScope
- Coroutine Dispatcher
- Coroutine ์ํ๊ด๋ฆฌ
- WithContext ๋์คํจ์ณ ๋ถ๋ฆฌ
- Coroutine ๋น๋
build.gradle ์ถ๊ฐ


์์ ๊ฐ์ด CoroutineScope๋ฅผ ํ์ดํ ํ์ ๋ ์๋์์ฑ์ด ๋จ๊ฒ๋๋ค๋ฉด ๋ฐ๋ก ์์กด์ฑ์ ์ถ๊ฐํ์ง ์์ผ์ ๋ ๋ฌด๋ฐฉํฉ๋๋ค.
CoroutineScope
์ฝ๋ฃจํด์ ์ฝ๋ฃจํด ์ค์ฝํ ์์์ ์คํ๋ฉ๋๋ค. ๋ชจ๋ ์ฝ๋ฃจํด์ ์ค์ฝํ ๋ด์์ ์คํ๋์ด์ผ ํ๋๋ฐ ์ด๋ฅผ ํตํด์ Activity or Fragment์ ์๋ช ์ฃผ๊ธฐ์ ๋ฐ๋ผ ์๋ฉธ๋ ๋ ๊ด๋ จ ์ฝ๋ฃจํด์ ํ ๋ฒ์ ์ทจ์ํ ์ ์๋๋ฐ ์ด๋ ๊ณง ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ์ค์ฝํ๋ ์ปค์คํ ๋๋ ์ด๋ฏธ ๋ด์ฅ๋ ๋ฒ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
CoroutineScope๋ ์ฌ์ค CoroutineContext ํ์ ํ๋๋ฅผ launch ๋ฑ์ ํ์ฅ ํจ์ ๋ด๋ถ์์ ์ฌ์ฉํ๊ธฐ ์ํ ๋งค๊ฒ์ฒด ์ญํ ๋ง ๋ด๋นํ๋ค.
CoroutineScope๋ GlobalScope, CoroutineScope, ViewModelScope๊ฐ ์กด์ฌํฉ๋๋ค.
GlobalScope(๊ธ๋ก๋ฒ ์ค์ฝํ) : ์ฑ์ ์๋ช ์ฃผ๊ธฐ์ ํจ๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์ ์คํ ๋์ค์ ๋ณ๋ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๊ฐ ํ์์๋ค. ์์~์ข ๋ฃ ๊น์ง ๊ธด์๊ฐ ์คํ๋๋ ์ฝ๋ฃจํด์ ๊ฒฝ์ฐ ์ ํฉํ๋ค.
CoroutineScope(์ฝ๋ฃจํด ์ค์ฝํ): ๋ฒํผ์ ๋๋ฌ ๋ค์ด๋ก๋ ํ๊ฑฐ๋ ์๋ฒ์์ ์ด๋ฏธ์ง๋ฅผ ์ด ๋ ๋ฑ, ํ์ํ ๋๋ง ์ด๊ณ ์๋ฃ๋๋ฉด ๋ซ์์ฃผ๋ ์ฝ๋ฃจํด ์ค์ฝํ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.

ViewModelScope(๋ทฐ๋ชจ๋ธ ์ค์ฝํ) : Jetpack ์ํคํ ์ณ์ ๋ทฐ๋ชจ๋ธ ์ปดํฌ๋ํธ ์ฌ์ฉ์ ViewModel ์ธ์คํด์ค์์ ์ฌ์ฉํ๊ธฐ ์ํด ์ ๊ณต๋๋ ์ค์ฝํ์ด๋ค. ํด๋น ์ค์ฝํ๋ก ์คํ๋๋ ์ฝ๋ฃจํด์ ViewModel ์ธ์คํด์ค๊ฐ ์๋ฉธ๋ ๋ ์๋์ผ๋ก ์ทจ์๋๋ค.

CoroutineScope์ ๊ฒฝ์ฐ GlobalScope์๋ ๋ฌ๋ฆฌ Dispatchers๋ฅผ ์ง์ ํ ์ ์๋๋ฐ ์ด๋ ์ฝ๋ฃจํด์ด ์คํ๋ ์ค๋ ๋๋ฅผ ์ง์ ํ๋ ๊ฒ์ด๋ค.
Coroutine Dispatcher(์ฝ๋ฃจํด ๋์คํจ์ณ)
Coroutine Dispatcher์ ๊ฒฝ์ฐ์๋ Default, IO, Main, Unconfined ๋ฑ์ด ์๋ค.
- Dispatchers.Default : ์๋๋ก์ด๋ ๊ธฐ๋ณธ ์ค๋ ๋ํ ์ฌ์ฉ, CPU๋ฅผ ๋ง์ด ์ฐ๋ ์์ ์ ์ต์ ํ (๋ฐ์ดํฐ ์ ๋ ฌ, ๋ณต์กํ ์ฐ์ฐ ๋ฑ)
- Dispatchers.IO : ์ด๋ฏธ์ง ๋ค์ด๋ก๋, ํ์ผ ์ ์ถ๋ ฅ ๋ฑ ์ ์ถ๋ ฅ์ ์ต์ ํ ๋์ด์๋ ๋์คํจ์ณ (๋คํธ์ํฌ, ๋์คํฌ, DB ์์ ์ ์ ํฉ)
- Dispatchers.Main : ์๋๋ก์ด๋ ๊ธฐ๋ณธ ์ค๋ ๋ ์์ ์ฝ๋ฃจํด ์คํ (UI์ ์ํธ์์ฉ์ ์ต์ ํ)
- Dispatchers.Unconfined : ํธ์ถํ Context๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋๋ฐ ์ค๋จ ํ ๋ค์ ์คํ๋ ๋ Context๊ฐ ๋ฐ๋๋ฉด ๋ฐ๋ Context๋ฅผ ๋ฐ๋ผ๊ฐ๋ ํน์ดํ ๋์คํจ์ณ
๋์คํจ์ณ๋ ์ฝ๋ฃจํด์ ์ ๋นํ ์ค๋ ๋์ ํ ๋นํ๋ฉฐ, ์ฝ๋ฃจํด ์คํ ๋์ค ์ผ์ ์ ์ง or ์คํ ์ฌ๊ฐ๋ฅผ ๋ด๋นํ๋ค.
Coroutine ์ํ๊ด๋ฆฌ
์ฝ๋ฃจํด์ launch, async๋ก ์์์ด ๊ฐ๋ฅํฉ๋๋ค. launch๋ ์ํ ๊ด๋ฆฌ async๋ ์ํ ๊ด๋ฆฌ + ๊ฒฐ๊ณผ ๋ฐํ์ ๋ด๋นํฉ๋๋ค.
์ฝ๋ฃจํด์ ์์ฑํ๊ณ ์ํ ๊ด๋ฆฌ ๋ฉ์๋๋ฅผ ํธ์ถํด์ ์ค๋จ, ์ง์ฐํ ์ ์์ต๋๋ค.
Cancel(์ค๋จ ๊ด๋ จ)
์ฝ๋ฃจํด์ ๋์์ ๋ฉ์ถ๋ ์ํ๊ด๋ฆฌ ๋ฉ์๋์ ๋๋ค. ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.

job ์์ job1 ์ฝ๋ฃจํด์ด ์๋ ๊ฒ์ด ๋ณด์ผํ ๋ฐ ์์ ์ฝ๋ฃจํด์ cancelํ๊ฒ๋๋ฉด ํ์ ์ฝ๋ฃจํด๋ ์ค๋จ๋ฉ๋๋ค.
Join(์์ฐจ ์คํ)
์ฝ๋ฃจํด ๋ด๋ถ์ ์ฌ๋ฌ launch ๋ธ๋ก์ด ์๋ ๊ฒฝ์ฐ ๋ชจ๋ ์๋ก์ด ์ฝ๋ฃจํด์ผ๋ก ๋ถ๊ธฐ๋์ด ๋์ ์คํ ๋๊ธฐ ๋๋ฌธ์ ์์๋ฅผ ์ ํ ์ ์๋ค.
์์๋ฅผ ์ ํด์ผํ๋ค๋ฉด ์๋์ฒ๋ผ join() ์ ์ฌ์ฉํด ์์ฐจ์ ์ผ๋ก ์คํ๋๋๋ก ์ฝ๋๋ฅผ ์งค ์ ์๋ค.

ํ๋ฐ ์๋์ ๊ฐ์ด ๋๋ค๋ฉด ๋ ๋ฒ์งธ launch์ ์ธ ๋ฒ์งธ launch๊ฐ ๊ฐ์ด ์คํ๋๋ค.


์ค๊ฐ launch๊ฐ ์คํ๋ ์ํ์์ ๋ง์ง๋ง launch๊ฐ join()์ด ๋ค์ด๊ฐ๋ค๊ณ ํด๋ ์์๋ฅผ ์งํค์ง ๋ชปํ๋ ์ ์ฌ์ฉํ์ฌ์ผํ๋ค.
async(๊ฒฐ๊ณผ ๋ฐํ)
async๋ก ์ฝ๋ฃจํด ์ค์ฝํ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ์ธ ์ ์๋ค. ํนํ ์ฐ์ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ 2๊ฐ์ ๋คํธ์ํฌ ์์ ์ ๊ฒฝ์ฐ ๋ชจ๋ ์๋ฃ๋์์ ๋ ์คํ๋์ผ ํ๋ค๋ฉด async, await๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.

WithContext ๋์คํจ์ณ ๋ถ๋ฆฌ
suspend function์ ์ฝ๋ฃจํด ์ค์ฝํ์์ ์ฌ์ฉํ ๋ ํธ์ถํ ์ค์ฝํ์ ๋ค๋ฅธ ๋์คํจ์ณ๋ฅผ ์ฌ์ฉํด์ผํ ๋๊ฐ ์๋ค.
ํธ์ถ ์ชฝ ์ฝ๋ฃจํด์ ์๋ฒ์์ ํ์ผ IO๋ฅผ ํ๊ณ withContext๋ฅผ ์ฌ์ฉํด Dispatchers.Main(UI ์ ์ด)์ผ๋ก ๋์คํจ์ณ๋ฅผ ๋ณ๊ฒฝํด์ค๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ชจ์ ์ฝ๋ฃจํด ๋์คํจ์ณ๋ฅผ ์ฌ์ฉํ์ง๋ง withContext๋ก ๋์คํจ์ณ๋ฅผ ๋ฌ๋ฆฌ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.

Coroutine ๋น๋
์ฝํ๋ฆฐ์ ์ฝ๋ฃจํด ๋น๋์ ์ํ๋ ๋์์ ๋๋ค๋ก ๋๊ฒจ ์ฝ๋ฃจํด์ ์์ฑํ์ฌ ์คํํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์ฝ๋ฃจํด์์ ์ ๊ณตํ๋ ๋น๋๋ค
- launch : ํ์ฌ ์ค๋ ๋ ์ค๋จ ์์ด ์ฝ๋ฃจํด์ ์ฆ์ ์์ ์ํจ๋ค. ๊ฒฐ๊ณผ๋ฅผ ํธ์ถํ ์ชฝ์ ๋ฐํํ์ง ์๋๋ค.
- async : ํ์ฌ ์ค๋ ๋ ์ค๋จ ์์ด ์ฝ๋ฃจํด์ ์ฆ์ ์์ ์ํจ๋ค.ํธ์ถ ์ชฝ์์ await()๋ฅผ ํตํด ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์๋ค. ๋ณํ์ผ๋ก ์คํ๋ ํ์๊ฐ ์๋ ๋ค์์ ์ฝ๋ฃจํด์ ์ฌ์ฉํ ๋ ์ฌ์ฉ! async ๋น๋๋ suspend ํจ์ ๋ด๋ถ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- withContext : ๋ถ๋ชจ ์ฝ๋ฃจํด์ ์ํด ์ฌ์ฉ๋๋ Context์ ๋ค๋ฅธ Context์์ ์ฝ๋ฃจํด์ ์คํ ์ํฌ ์ ์๋ค. ์ฝ๋ฃจํด์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ๋ async ๋์ ์ ์ฉํ๊ฒ ์ธ ์ ์๋ค.
- coroutineScope : ๋ณํ์ผ๋ก ์คํ๋ ๋ค์์ ์ฝ๋ฃจํด์ suspend ํจ์๊ฐ ์์ ์ํค๊ณ ๋ชจ๋ ์ฝ๋ฃจํด์ด ์๋ฃ๋ ๋๋ง ์ด๋ค ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ ์ด์์ ์ด๋ค. ์ฌ๋ฌ ์ฝ๋ฃจํด ์ค ํ๋๋ผ๋ ์คํ์ ์คํจํ๋ฉด ๋ชจ๋ ๋ค๋ฅธ ์ฝ๋ฃจํด์ด ์ทจ์๋๋ค.
- supervisorScope : coroutineScope ๋น๋์ ๋น์ทํ๋ค. ๊ทธ๋ฌ๋ ํ ์ฝ๋ฃจํด์ด ์คํจํ๋๋ผ๋ ๋ค๋ฅธ ์ฝ๋ฃจํด์ด ์ทจ์๋์ง ์๋๋ค.
- runblocking : ์ฝ๋ฃจํด์ ์์์ํค๊ณ ์๋ฃ๋ ๋๊น์ง ํ์ฌ ์ค๋ ๋๋ฅผ ์ค๋จ ์ํจ๋ค. ์ฝ๋ฃจํด์ ์ทจ์ง์ ์ ๋ฐ๋. ์ฝ๋ ํ ์คํธ, ๋ ๊ฑฐ์ ์ฝ๋ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํตํฉ์ ์ ์ฉ. ๊ทธ ์ธ์๋ ์ฌ์ฉํ์ง ๋ง์.
๊ฒฐ๋ก
์ฝ๋ฃจํด์ ์๋๋ก์ด๋ ๊ฐ๋ฐํ๋ฉด์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด Rx์ ๊ฐ์ด ํ์ํ ๊ฒ์ด๊ธฐ์ ๊ณต๋ถ๋ฅผ ๊ณ์ํ๊ณ ํฌ์คํ ๋ ๊ณ์ ์ด์ด๋๊ฐ ๊ฒ์ด๋ค.
์ค์ ๋ก ์ฌ์ฉํ๋ฉด์ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋์ํ๋์ง ์ดํดํ๋๊ฒ ๋ ๋น ๋ฅด๋ค ์๊ฐ์ด ๋ค์ด ๋ง์ด ๋ถ๋ชํ๊ณ ์๋ฌ๋ ๋ด๋ณด๋ฉด์ ์ฌ์ฉํด๋ณผ ๊ณํ์ด๋ค.
'Development > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DI - Hilt์ ๊ดํ์ฌ (0) | 2023.07.10 |
---|---|
Thread์ ๊ดํ์ฌ ๋ง ์ ์ด๋ณด๊ธฐ (0) | 2023.04.11 |
๐ ์ฌ์ฉ์๋ค์ด ์ฑ์ ์ ์ ๋ชป ์ฐ๊ฒ ํ ์ ์๋? - Firebase Remote Config (0) | 2022.09.18 |
Databinding ์์ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ค์ ๊ฐ๊ณตํ ๊น? ๐ฝ (1) | 2022.09.18 |
๐ฆ Databinding์ ์ฐ๋ฉด์ - 2 (0) | 2022.09.08 |