๋น๋๊ธฐ์ ํ๋ก๋๋ฐ์ ํ๊ธฐ ์ํด์ ์ฌ์ฉ๋ฉ๋๋ค.
๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ง๋ ์๊ฐ ๋์ ๋ค๋ฅธ ์ผ์ ํ ์ ์์ผ๋ฏ๋ก ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํจ
๋๊ธฐ
๋น๋๊ธฐ
์ฝ๋ฃจํด์ ํจ๊ป ์ฐ๋ ๋ฃจํด ์ด๋ค
์ฝ๋ฃจํด์ "Co"๋ with ๋๋ together๋ฅผ ๋ปํฉ๋๋ค
- Main-Safe ํด์ผํ๋ค ( Main Thread)๋ฅผ Block ํ์ง ์๋๋ค
- Main-Safe ๋ฐ ์ฌ๋ฌ Thread๋ฅผ ํ์ฉํ์ฌ ๋์์ฑ ์ฝ๋๋ฅผ ์ฌ์ฉํด์ผํ๋ค
- ๋์์ฑ ์ฌ์ฉํ ๋ ์ฝ๋ฐฑ๋ณด๋ค Coroutine์ ์ฌ์ฉํ๋๊ฒ์ด ๊ฐ๋ ์ฑ์ ๋ ์ข๋ค
- ๋ฉํฐ ์ค๋ ๋๋ณด๋ค Coroutine์ ํ์ฉํ๋ ๊ฒ์ด ๋ถํ์ํ ์ค๋ ๋ ์์ฑ๊ณผ blocking์ ์์ ์ฑ๋ฅ์ด ๋ ์ข๋ค.
์ฐ๋ฆฌ๊ฐ ๋งํ ์๋ ํด๋ฆฐํ ์ฑ์ ๋ง๋ค๊ธฐ ์ํด์๋ ์ผ๋ง๋ ๋นจ๋ผ์ผ ํ ๊น์?
์ด๊ฒ์ ๋ณด์๋ฉด ์ฐ์์ ์ธ ์ด๋ฏธ์ง๊ฐ ๋ง์น ์์์ฒ๋ผ ๋ณด์ฌ์ ์ธ์์ด ๋ฉ๋๋ค.
์ด์ฒ๋ผ ์ฌ๋์ ๋์ ์ด๋น 60 ํ๋ ์์ธ ๋ชจ์
๊ณผ ๊ทธ ์ด์์ ๋ชจ์
์ ํฐ ์ฐจ์ด๋ฅผ ๋๋ผ์ง ๋ชปํฉ๋๋ค
1000ms/ 60 frames = 16.666 ms/ frame
์ฐจ์ด๋ฅผ ๋๋ผ์ง ๋ชปํ๊ฒ ํ ๋ ค๋ฉด 16ms ๋ง๋ค ์์ ์(์ ๋ ฅ,์ฒ๋ฆฌ,ํต์ ,๋๋๋ง) ์ฒ๋ฆฌํด์ผํฉ๋๋ค
๊ทธ๋ฆฌํ์ฌ ์ฌ์ฉ์๊ฐ ์ฑ์ ์ฌ์ฉํ๋ ๋์์ ์ด๋น 60 ํ๋ ์์ ์ ๋ฐ์ดํธ๋ฅผ ์ ์งํด์ผ ํ๋ค๋ ์๋ฌด๊ฐ ์ฃผ์ด์ง๊ณ , ์ด๋ฅผ ์งํค๊ธฐ ์ํด์ Main-Thread ๊ฐ Blocking ํ์ง ์๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํ ์ผ์ด ๋ฉ๋๋ค
Main-Thread์์ ๋คํธ์ํน์ ์์ ์ ์คํํ๋ฉด NetworkOnMainThreadException ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค๋จํ๋ ๋ฑ ์ค๋ฅ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
Main ํจ์์์ Main-Thread๊ฐ ์ปดํฌ๋ํธ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋์ ๊ทธ ์์ ๋ฉ์๋ ํธ์ถ ,UI ์์
์ ์คํํ๋ค๋ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค .
๊ทธ์ค UI ์์
์ Main-Thread์์๋ง ์คํ์ด ๋ ์ ์๋ค๋ ํน์ง(Single-Thread)์ด ์์ต๋๋ค.
ํน์ ์์ ์ด ํ๋์ ์ค๋ ๋์์๋ง ์ฌ์ฉ๋ ์ ์๊ฒ ํ๋ ์ ํํ๋๊ฒ
๊ทธ๋ฌ๋ฏ๋ก UI ์์ ์ ๋ฉ์ธ์ค๋ ๋์์๋ง ์ด๋ค์ง ์ ์๊ธฐ๋๋ฌธ์, ๋ฉ์ธ์ค๋ ๋๊ฐ ๋ฐฉํด๋๋ฉด ์ํํ UI ์์ ์ด ์ด๋ ค์์ง๊ฒ ๋๋ค๋ ์ ์ ์ดํด ํ ์ ์์ต๋๋ค
Concurrency์ ์ ์งํ๊ธฐ ์ํด์๋ Main Threead ๋ง๊ณ ๋ณ๋์ Thread๋ฅผ ๋์ด์ ํญ์์ฑ์ ์ ์งํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
ํ๋์ Process์์๋ ์ฌ๋ฌ๊ฐ์ Thread๊ฐ ์๊ณ Thread๋ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ์ ์ํํฉ๋๋ค
๊ทธ๋ฆผ์ Main Thread JVM ํ๋ก์ธ์ค๋
๊ทธ๋ฆฌํ์ฌ ๊ตฌ๊ธ์์๋ Concurrency ์ ์ ์งํ๊ธฐ์ํ Dream Code์ ๋ํ ์ฐ๊ตฌ๋ฅผ ํด์์ต๋๋ค
Google ์ด ๊ฐ๋ ์ฑ์ด ์ข์ ์ฝ๋(Dream Code)๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ๋ ๊ณผ์
- ์๋ฒ์ธ fectchUserData() ํธ์ถ๋ค ๊ทธ ๋ด์ฉ์ texview.text์ ๋์ ํ๋ ์ฌ์ง์ ๋๋ค. ํ์ง๋ง NetworkCall ์์์ MainThread ์์ Network ํ๊ธฐ ๋๋ฌธ์ Exceptio์ด ๋ฐ์ํฉ๋๋ค.
์ Exception์ด ๋ฐ์ํ์๊น? ๋ฐ๋ก Main-Safe ๊ท์น์ ์งํค์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
- UI๋ฅผ UI ์ฐ๋ ๋์์ ์ ๋ฐ์ดํธํด์ผํ๋๋ฐ ๋ณ๋ Thread์์ ์ ๋ฐ์ดํธํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ ํ์์ต๋๋ค.
CalledFromWrongThreadException
์ฆ , thread์ UI Thread์ธ Main Thread ์คํ๋๊ฒ ๋ณ๊ฒฝ์์ผ์ค์ผํฉ๋๋ค.
๊ทธ๋์ ์๋ฒ ์์ ๋ฐ์ดํฐ๋กค ๊ฐ์ ธ์ค๋ Thread์์ ๋ค์ Main-Thread๋ก ๋ณํํด์ ์ฝ๋ฐฑ์ ์ค์ ์ ๋ฐ์ดํธ ํ๋ ํ์์ ๋๋ค. ์ด๊ฒ์ด ์ค์ฒฉ์ด ๋๋ฉด ์ฝ๋ฐฑ ์ง์ฅ์ด ๋ฉ๋๋ค.
์ํ๋ ๋๋ก ๋์ํ์ง๋ง, ์ฝ๋ฐฑ์ด ์ฝ๋ฐฑ์ ๋ถ๋ฅด๋, ์ฝ๋ฐฑ ์ง์ฅ์ ์ํ์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ Ui ๊ทธ๋ฆด๋ user ๊ฐ์ฒด๊ฐ ์์์ด ๊ณ์ ๋ฐ๋๊ฑฐ๋ ์ญ์ , ์ฌ์์ฑ ํ๊ฑฐ๋ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ํ์ด ๋ฐ๋ฆ ๋๋ค.
Coroutines Simplify async code by replacing callbacks
๋ค์์ ๋ณด๋ฉด
๋ค์์ ๋ณด๋ฉด