coroutineScope ๊ด๋ จ ์ง๋ฌธ ๋ฐ ์ค์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ์ง๋ฌธ
์๋
ํ์ธ์. ๋์ ๋ต๋ณํด๋๋ฆฝ๋๋ค!!coroutineScope๋ ์ฃผ์ด์ง ๋ธ๋ก๊ณผ ๋ชจ๋ ์์ ์ฝ๋ฃจํด์ด ๋๋ ๋๊น์ง ๋๊ธฐํ๋ ํจ์์
๋๋ค. ์ฌ๋ฌ ์ฝ๋ฃจํด ์ค์ฝํ๋ฅผ ๊ตฌ์กฐํํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.suspendํจ์๋ ์ฝ๋ฃจํด์ด ์๋๊ธฐ ๋๋ฌธ์ ๋น๋ํจ์๋ฅผ ํตํด ๋์์ฑ์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.์ค๋จ์ง์ ์ ์ฝ๋ฃจํด์ด ์ผ์ ์ค๋จ๋๊ณ ๋ค๋ฅธ ์ฝ๋ฃจํด์ด ํด๋น ์ค๋ ๋์์ ์คํ๋ ์ ์๋ ์ง์ ์
๋๋ค.์ค๋จ ์ง์ ์์ฒด๋ ๋์์ฑ์ ์ง์ํ์ง ์์ผ๋ฉฐ, ๋์์ฑ์ async, launch, ๋๋ Dispatchers์ ๊ฐ์ ๋๊ตฌ์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค.launch๋ ์ฝ๋ฃจํด ๋จ์ผ ์์
, coroutineScope๋ ๋์ ์์
์ ๋ฌถ์์ ๊ด๋ฆฌํ๋ ์์ ์ถ์ํ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.suspend fun callAbByCoroutineScope(): String = coroutineScope { val a = async { callA() } val b = async { callB() } a.await() + b.await() // AB ๊ฒฐ๊ณผ ๋ฐํ } suspend fun callDWithDependencies(): String = coroutineScope { val abDeferred = async { callAbByCoroutineScope() } val cDeferred = async { callC() } callD(abDeferred.await(), cDeferred.await()) // D ํธ์ถ }ABํธ์ถ์ ์ถ์ํ ํ๋ ค๋ฉด callAbByCorouineScope()๋ก ๋ฌถ๊ณ Dํธ์ถ์ ์ถ์ํํ๋ ค๋ฉด ํด๋น 3์ค์ coroutineScope()๋ก ๋ฌถ๋๊ฑฐ์ฃ ๋ง์ฝ ์ฌ์ฉํ๋ API๊ฐ ๋
ผ๋ธ๋กํน ๋ฐฉ์(WebClient)์ด ์๋๋ผ ๋ธ๋กํน ๋ฐฉ์(RestTemplate)์ด๋ผ๋ฉด, ํธ์ถ ์ค ํด๋น ์์
์ค๋ ๋๊ฐ ๋๊ธฐ ์ํ๋ก ๋ธ๋กํน๋ฉ๋๋ค.