- ๋ฐ๋ชจ ์์
Home | Loading |
---|---|
![]() |
![]() |
- ์นดํ ๊ณ ๋ฆฌ API๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์จ ์นดํ ๊ณ ๋ฆฌ ์ค 3๊ฐ ์ด์์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ ์ ํ์ฌ ํญ์ ๊ตฌ์ฑ
- ๊ฐ ํญ ํด๋ฆญ ์ ๊ทธ ์นดํ ๊ณ ๋ฆฌ์ ํด๋นํ๋ ๋ฐฉ์ก ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ค
- ํ์ด์ง ๊ธฐ๋ฅ์ผ๋ก ๋ค์ ํ์ด์ง ๋ฆฌ์คํธ๊ฐ ํ๋จ์ ์ถ๊ฐ๋๋ค.
- ๋ฐฉ์ก ํด๋ฆญ ์ ํด๋น ๋ฐฉ์ก์ ์์ธ ํ์ด์ง๋ก ์ด๋
Detail | Play |
---|---|
![]() |
![]() |
- ํด๋ฆญํ ํด๋น ๋ฐฉ์ก ์ ๋ณด๋ฅผ ์์ธํ ํ์ธ ๊ฐ๋ฅ
- ํด๋น ํ๋ฉด์์ ๋ฐฉ์ก ์์ฒญ์ด ๊ฐ๋ฅ
- Multi Module
- ๋น๊ต์ ํ๋ก์ ํธ๊ฐ ๊ฐ๋จํ๋งํผ Monolithic ์ฑ ๊ตฌ์กฐ๊ฐ ๋ ๊ฐ๋ฐ์ ์์ด ํจ์จ์ ์ผ ๊ฒ์ด๋ค.
- ํ์ง๋ง, ์ด๋ฒ ๊ธฐํ๋ฅผ ํตํด ๋ฉํฐ ๋ชจ๋์ ๋ํ ํ์ต๊ณผ ๋ถ๋ฆฌ๋ ๋ชจ๋์์ ๊ฐ์์ ์ญํ ์ ์ถฉ์คํ ํ ์ ์๋๋ก ๊ฐ๋ฐ์ ํ๋ ๊ฒ์ ๋ชฉํ๋ก ๋๊ณ ๋ฉํฐ ๋ชจ๋๋ก ๊ฐ๋ฐํ๊ฒ ๋์๋ค.
- buildSrc + Kotlin DSL
- Multi Mdoule๋ก ๊ฐ๋ฐ์ ํ๊ฒ ๋๋ฉด์ ํ๋ก์ ํธ ๊ทธ๋๋ค ๊ด๋ฆฌ๋ฅผ ์ผ๊ด์ ์ผ๋ก ์ฒ๋ฆฌํ ํ์๊ฐ ์์๋ค.
- ๊ธฐ์กด์ ํ๋ ์คํ์ผ๋๋ก Groovy๋ฅผ ํตํด ํ๋ ค๋ ์ค ์๋๋ก์ด๋์์ KTS๋ฅผ ๊ถ์ฅํ๊ณ ์์๋ค.
- Kotlin์ด ๋ ์ต์ํ๋ ๋ด๊ฒ ์ด๋ฅผ ํตํด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๋ผ ํ๋จํด ์ด๋ฒ ํ๋ก์ ํธ์ ์ ์ฉํ๊ฒ ๋์๋ค.
- Fragment Transaction
- Detailํ๋ฉด๋ Fragment๋ก ๊ฐ๋ฐํ๊ฒ ๋๋ฉด์ Jetpack navigation ํ์ฉ์ ์๊ฐํ๋ค.
- ํ์ง๋ง Home ํ๋ฉด์์ ๋ฒ์ด๋ Detail ํ๋ฉด์ผ๋ก ์ด๋ํ ํ Home ํ๋ฉด์ผ๋ก ๋ค์ ๋์์ค๊ฒ ๋์์ ๋ Home ํ๋ฉด์ ์ด์ ์ํ๋ฅผ ์๊ณ ์๋ก ๋ชจ๋ ๊ฒ์ ์์ฑํ๊ฒ ๋์๋ค.
- jetpack navigation์ ํ์ฉํ๊ฒ ๋๋ฉด ์ด์ ์ํ์ fragment๋ฅผ ์ ์ฅํ ์ ์์
- Jetpack Navigation์ ํ๊ณ๋ก Fragment Transaction์ ์ง์ ๊ด๋ฆฌํ๊ฒ ๋์๋ค.
- Test Code
- Data Module์ BroadDataSource๊ฐ API ํธ์ถ์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๋งํผ ์ค์ํ ์ญํ ์ ๋งก๊ณ ์๊ธฐ์ ํด๋น ๋ถ๋ถ์ Test Code๋ฅผ ์์ฑํ๊ฒ ๋์๋ค.
- MockWebServer๋ฅผ ํ์ฉํด ์ ์์ ์ผ๋ก ๋์ํ๋ ๋ก์ง์์ ํ์ธํ ์ ์์๋ค.
- UseCase
- viewmodel์ด Repository๋ฅผ ๊ฐ์ง๊ณ ์ง์ ์ํ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋๋ค๋ฉด, viewModel์ ์์ ์ ์ญํ ์ด ๋ชจํธํด์ง ์ ์๋ค.
- viewmodel์ ๊ฐ ํ๋ฉด์ data holder์ ์ญํ ๋ก ๊ทธ ์ญํ ์ด ๋ชจํธํด์ง๋ฉด ์๋๋ค๊ณ ์๊ฐํ๋ค.
- ๊ฐ viewmodel์ด ์์ ์ด ํ๊ณ ์ ํ๋ ์ญํ ์ ๋ช ํํ ์ดํดํ๊ธฐ ์ํด UseCase๋ฅผ ์์ฑํด viewModel์ด ํ์ํ ๊ธฐ๋ฅ๋ง์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์๋ค.
- viewmodel์ด Repository๋ฅผ ๊ฐ์ง๊ณ ์ง์ ์ํ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋๋ค๋ฉด, viewModel์ ์์ ์ ์ญํ ์ด ๋ชจํธํด์ง ์ ์๋ค.
- TabLayout + ViewPager
- Category List๋ฅผ ์์ฒญํ๊ณ ๋ฐ์์จ ํ ์์์ 5๊ฐ์ ์นดํ ๊ณ ๋ฆฌ ์ ๋ณด๋ฅผ ๋ฆฌ์คํธ ํ๋๊ทธ๋จผํธ๋ก ์ ๋ฌํ๊ณ ์์ฑํ๋ค.
- ๊ทธ๋ ๊ฒ ์์ฑ๋ 5๊ฐ์ ํ๋๊ทธ๋จผํธ๋ TabLayout๊ณผ ViewPager์ ๊ฒฐํฉ์ ํตํด ๊ด๋ฆฌ๋๊ณ , ํ๋ฉด์ ๋์ธ ์ ์๋ค.
- ํ์ง๋ง, ์ด๊ธฐ ๋ก๋ ์์ fragment๋ฅผ ํ๋ฉด์ ๋์ธ ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์์ฑ์ด ๋๊ธฐ์ ๋ค์ ๋๋ฆผ๊ฐ์ด ์๋ค.
- ํด๋น ๋ฌธ์ ๋ HomeFragment๊ฐ ์์ฑ๋ ๋, ์ฆ ViewPager๊ฐ ์ด๊ธฐํ ๋๊ณ ๋ ํ์ offscreenPageLimit๋ฅผ ์ค์ ํด ๋์ด preFetch๋ฅผ ์ํํ๊ฒ ํ๋ค.
- Paging
- ํ์ด์ง ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด Android Jetpack์์ ์ ๊ณต๋๋ Paging Library๋ฅผ ์ฌ์ฉํ๋ค.
- RecyclerView Adapter๋ฅผ PagingDataAdapter๋ก ๊ตฌํํ๊ณ , RecyclerView๊ฐ ๋ฐ๋ฅ์ ๋ฟ์ ๋ ์ฆ์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์์ ๋ค์ ํ์ด์ง์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด์ค๋ค.
- PagingSource์ ์์น์ ๋ํ ๊ณ ์ฐฐ์ ์งํํ์ผ๋ฉฐ, ํด๋น ๋งํฌ์ ์ ๋ฆฌํด๋์๋ค.
- ๋ค์ ํ์ด์ง๊ฐ ๋ก๋๋ ๋ ํ๋จ LinearProgress๋ฅผ ํตํด ๋ก๋๋๋ ์ํฉ์ ํ์ํ๋ค.
- Fragment๋ก ๊ตฌํ
- Home ํ๋ฉด๊ณผ ๋งค์ฐ ๋ค๋ฅธ ํ๋ฉด์ ๊ฐ์ง๊ณ ์๊ธฐ์ Activity๋ก ๊ตฌํ์ ์๊ฐํ๊ณ ์์๋ค.
- ํ์ง๋ง ํ๋ฉด ์ ํ์ ์ ๋๋ฉ์ด์ ๊ณผ ํ๋ฉด๋ค์ ์ํ ๊ด๋ฆฌ๋ค์ ์ง์ ํ ์ ์๋ค๋ ์ฅ์ ์ Fragment๋ฅผ ์ ํํ๋ค.
- ๋ฐฉ์ก ๋ฐ์ดํฐ๋ฅผ ํด๋ฆญํ๊ณ ํ๋ฉด์ด ์ ํ๋ ๋ Detail ํ๋ฉด์ผ๋ก ์์ฐ์ค๋ ๋ณํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- WebView
- ํด๋น ํ๋ฉด์์ ๋ฐฉ์ก ์ธ๋ค์ผ์ ๋ณด์ฌ์ฃผ๊ณ ํด๋ฆญ ์ player๋ก ๋ฆฌ๋ค์ด๋ ์ ์ ์๊ฐํ๋ค.
- ํ์ง๋ง ๋ฐฉ์ก์ ํ์ฌ ํ๋ฉด์์ ์ง์ ๋ณด๋ ๊ฒ์ด ๋ ์ ํฉํ๋ค๊ณ ํ๋จ๋์ด ์น๋ทฐ๋ฅผ ํ์ฉํด player๋ฅผ ์ง์ ๋์ฐ๊ฒ ๋์๋ค.
- player ๋ชจ๋ฐ์ผ ๋ฒ์ ์ ์ค๋ฅ๊ฐ ์์ด ์ด๋ฅผ ํด๊ฒฐํ๋๋ฐ ๋ค์ ํ๋ค์๋ ์ ์ด ์์๋ค.
Architecture | MVVM |
Design Pattern | Repository Pattern, Delegation Pattern |
Jetpack Components | DataBinding, Flow, ViewModel, RecyclerView, Lifecycle, ViewPager2, Paging3 |
Dependency Injection | Hilt |
Network | OkHttp3, Retrofit2, Gson |
Unit Test | junit, Coroutine, MockWebServer |
Asynchronous Processing | Coroutine |
Third Party Library | Coil |
Strategy | Git Flow |
Other Tool | Notion, Git Wiki |
๐ป Dev Environment | Language : Kotlin |
minSdk : 23 | |
targetSdk : 31 |