ํด๋น ๋งํฌ์์ ์ฑ์ ๋ค์ด๋ฐ์ผ์ค ์ ์์ต๋๋ค. Android Google Play Link
- ํ์์ ์ฐ๋ฆฌ ๋๋ค ๋ฏธ์ธ๋จผ์ง ์์น๋ฅผ ์๊ณ ์ถ์ ์ฌ๋๋ค
- ํธํก๊ธฐ ์งํ์ด ์์ด ๋ฏธ์ธ๋จผ์ง ์์น์ ์๋ฏผํ ์ฌ๋
- ํ์ฌ ์์น๋ฅผ ์ธก์ ํ์ฌ ๊ฐ์ฅ ๊ฐ๊น์ด ๋๊ธฐ ์ค์ผ ๊ด์ธก์ ์ ๋ณด๋ฅผ ๋ฐ์์ต๋๋ค.
- ๊ฐ์ฅ ๊ฐ๊น์ด ๋๊ธฐ ์ค์ผ ๊ด์ธก์์ ๋ฏธ์ธ๋จผ์ง ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- ๋ฏธ์ธ๋จผ์ง ์์น๋ฅผ ์ฑ์ ์ง์ ํ์ง ์๊ณ ๋ ๋ณผ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- ์๋ฆผ๋ฐ์์ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ผ๋ก ๋ณ๊ฒฝ๋ ์๋ ์์ต๋๋ค.
- Clean Architecture, Hilt, LiveData
- Kakao API TM์ขํ ๋ณํ๊ณ, Open API Air Korea
- Retrofit, enum class, Coroutine, OkHttp3, SwipeRefreshLayout, State Pattern
- ๊ฒฝ-์๋ ํ์์ผ๋ก ๋ฐ์์จ ์์น ์ ๋ณด๋ฅผ Kakao API๋ฅผ ํตํด TM์ขํ๋ก ์ ํํ๋ ๊ธฐ๋ฅ ๊ตฌํ
- ๋ณํํ TM์ขํ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ๊ด์ธก์ ์ ๋ณด๋ฅผ ๋ฐ์์ค๊ณ ํด๋น ๊ด์ธก์์ ์ค์๊ฐ ๋๊ธฐ ์ค์ผ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ฝ๋ ๊ฐ๋ฐ
- enum class๋ฅผ ์์ฑํ์ฌ 4๋จ๊ณ๋ก ๋ด๋ ค์ค๋ ๋๊ธฐ ์ค์ผ ํ๊ท ๋ฑ๊ธ์ ์ํ, ์ด๋ชจํฐ์ฝ, ๋ฐฐ๊ฒฝ์์ผ๋ก ๋ฑ๊ธํ ํ์ฌ ํ์ ๋ณํ
- SwipeRefreshLayout์ ํ์ฉํ์ฌ ์๋ต ์๊ฐ ์ง์ฐ, ์๋ฌ ์ํฉ์ ์ธก์ ์๋น์ค ๋๊ธฐํ ๊ธฐ๋ฅ ๊ตฌํ
- ํด๋ฆฐ์ํคํ ์ณ ๊ธฐ๋ฐ์ ์ฑ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๊ณ ์ง์ ๊ฐ๋ฐํ๋ ๊ฒฝํ์ด ๋์๋ค.
- ์ฒซ ์ฑ ์ถ์์์ผ๋ก ์ฑ์ ์ถ์ ๋ฟ ์๋๋ผ ์ง์์ ์ธ ์ ๋ฐ์ดํธ๊ฐ ์ค์ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
- ์๋ฒ๋ก๋ถํฐ ๋ฐ์์จ JSON ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ Model์ ํจ์จ์ ์ธ ์ค๊ณ๊ฐ ํ์ํจ์ ๊นจ๋ฌ์๋ค.
- Kotlin Data Class File from Json ์ด๋ผ๋ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด Json ์๋ต์ ๊ธฐ์ ๋ง ํ๋๋ผ๋ ๊ฐํธํ๊ฒ Model์ ์ค๊ณํ ์ ์๋ค.
- MainScope๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ Coroutine Scope(์ฝ๋ฃจํด์ด ์คํ๋๋ ๋ฒ์)๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ํ์ต โ Supervisor job job + Dispatchers.Main ์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋ ๊ตฌ์กฐ
- Main ์ฐ๋ ๋๋ UI ์์ ์ ์ํด, IO ์ฐ๋ ๋๋ ๋คํธ์ํฌ, ๋์คํฌ I/O ์คํ์ ์ฌ์ฉ์ ์ต์ ํ ๋์ด์๋ค๋ ์ ์ ํ์ต(Dispatcher๋ ์ฝ๋ฃจํด์ ์ด๋ค ์ฐ๋ ๋์์ ๋์ํ๋์ง์ ๋ํด์ ๋ช ์)
- Retrofit ์ฌ์ฉ์ Main, IO ์ฐ๋ ๋๊ฐ ์๋์ผ๋ก Switching๋๋ค๋ ์ ์ ํ์ต
- ๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ์์ ์ ๊ณตํ๋ Air Korea์ API ํต์ ์๋ฒ๊ฐ ์์ฃผ ๋ถ์์ ํ์ฌ ERR_CONNECTION_TIMED_OUT ์๋ฌ๊ฐ ์์ฃผ ๋ฐ์ํ๋ค.
- ์ง์ ๊ตฌํํ ์๋ฒ๊ฐ ์๋ Open API๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์์ธ์ฒ๋ฆฌ๋ง ๊ตฌํ