๐ฑ| Android56 [Android, Kotlin] ์๋ก์์ง Navigation Compose์ safe args ์ ์ฉํ๊ธฐ ์๋ก ์ด๋ฒ์ compose ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ํ๋ฉด ์ด๋ ์ ์ธ์๋ฅผ ์ ๋ฌํ๋ safe args๋ฅผ ๋ค์ ์ฌ์ฉํ๊ฒ ๋์๋๋ฐ, safe args๊ฐ ์ด๋ฒ compose ์ต์ ์ ๋ฐ์ดํธ๋ก ๋ ํธ๋ฆฌํ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋ณ๊ฒฝ๋ ๊ฒ ๊ฐ์์ ์ด๋ฒ ๊ธฐํ์ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์ ๋ฆฌํด ๋ณด๋ ค ํ๋ค. Navigation 2.8.0์ safe args ๋ณ๊ฒฝ ์ฌํญ์ด๋ฒ์ Navigation์ ๋ฒ์ ์ด 2.8.0-alpha08 ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋๋๋ฉด์ kotlin์ Serializable์ ํตํด ์ธ์๋ฅผ ๋๊ธธ ์ ์๊ฒ ๋ณ๊ฒฝ๋์๋ค. Serializable์ ํตํด data class๋ก ํ๋ฉด์ ์ ์ํ๊ณ data class์ ํ๋๋ก ๊ฐ์ ์ ๋ฌํ ์ ์๋ค.๊ทธ๋ฌ๋ฉด ๋ฐ๋ก ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์์๋ณด์. Serializable, Navigation ์ถ๊ฐlib.. 2025. 1. 23. [Android] thread์ ํจ๊ป ์์๋ณด๋ coroutine, flow์ ๋ํ ๊ณ ์ฐฐ ์ด๋ฒ ๊ณ ์ฐฐ์ ์ฃผ์ ๋ coroutine์ด๋ค.kotlin์ ์ฌ์ฉํ๊ฑฐ๋, ์ฌ์ฉ ์ค์ธ ๊ฐ๋ฐ์๋ค์๊ฒ๋ ํญ์ ๋ฐ๋ผ๋ค๋๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฐ๋ ์ด๋ค.์ด๋ฒ ํฌ์คํ ์ผ๋ก ํ์คํ๊ฒ ๊ถ๊ธํ๋ ๊ฒ๋ค์ ๊ณต๋ถํ๋ฉด์ ์ง๊ณ ๋์ด๊ฐ ์์ ์ด๋ค. coroutine์ด๋?coroutine์ thread ์์์ ์คํ๋๋ ์ผ์ ์ค๋จ ๊ฐ๋ฅํ ์์ ๋จ์์ด๋ค.ํ๋์ thread์์ ์ฌ๋ฌ coroutine์ด ์๋ก thread๋ฅผ ์๋ณดํด ๊ฐ๋ฉฐ ์คํ๋ ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ์ด์งธ์ coroutine์ด ์๊ฒจ๋๊ฒ ๋ ๊ฑธ๊น? coroutine์ ์ ์ฌ์ฉํ๊ฒ ๋์์๊น?thread ๊ธฐ๋ฐ์ ๋ค์ค thread ์์ ์ ํ๊ณcoroutine ์ด์ ์ ๋์์ฑ ์์ ์ ๋ชจ๋ thread ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฃจ์ด์ก๋ค.thread ๊ธฐ๋ฐ์ผ๋ก ์์ ์ ์ํํ๊ฒ ๋๋ฉด thread 1์ ์์ ์ด ์งํ๋๋ ์ค์ ๋ค๋ฅธ.. 2024. 11. 12. [Android] liveData, stateFlow์ ํจ๊ป ๋ณด๋ MVVM์ ๋ํ ๊ณ ์ฐฐ ์ด๋ฒ ํฌ์คํ ์์๋ ์ ๋ฒ ํฌ์คํ ์์ ์ธ๊ธํ๋ค์ํผ, clean architecture์ ํจ๊ป ์ค๋ฌด์์ ๋ฐํ์์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋์์ธ ํจํด์ธ mvvm์ ๋ํด ๊ณต๋ถํด์ ์ ์ด๋ณด๊ณ ์ ํ๋ค.๋ง์ฐฌ๊ฐ์ง๋ก ๊ณต๋ถํ๋ฉด์ ์ฐธ๊ณ ํ ํฌ์คํ ๋ ๊ฐ์ด ๋งํฌ๋ก ๋จ๊ฒจ ๋๊ฒ ๋ค. MVVM์ ๋ฌด์์ผ๊น?MVVM์ ๊ดํด์๋ ์ฐพ์๋ณด๋ฉด ์๋ฃ๊ฐ ๋ง์ด ๋์ค๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ ์ ์ํด ๋ณด๋ฉด,MVC์ MVP์์ view์ ์ฎ์ด๋ ์์กด์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด view model์ ๋์ ํ ๋์์ธ ํจํด.MVVM์ model, view, view model์ ์ฝ์๋ค. ์ฌ๊ธฐ์ view model๊ณผ view๋ 1 : n์ ๊ด๊ณ๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ํน์ง์ ์ง๋๋ค. MVVM์ ์ ์ฐ๋ ๊ฑธ๊น?mvvm ๋์์ธ ํจํด์ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ๊ฐ์ง๋ค.์์กด์ฑ ์ต์ํview๋ view model์.. 2024. 11. 11. [Android] hilt์ ํจ๊ป ๋ณด๋ clean architecture์ ๋ํ ๊ณ ์ฐฐ ์ด๋ฒ ํฌ์คํ ์์๋ Android ๊ฐ๋ฐ์์ ์ clean architecture๋ฅผ ์ฌ์ฉํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ clean architecture์ ๊ดํด์ ๊ถ๊ธํ๋ ๊ฒ๋ค์ ๊ณต๋ถํด์ ์ ์ด ๋ณด๊ณ ์ ํ๋ค. ๋ด๊ฐ ๊ณต๋ถํ๋ฉด์ ์ฐธ๊ณ ํ ํฌ์คํ ๋ ํจ๊ป ๋จ๊ธธ ํ ๋ ๋ํ ๋ด์ฉ์ด ๊ถ๊ธํ๋ฉด ํ์ธํด ๋ณด๋ ๊ฒ๋ ์ข๊ฒ ๋ค. clean architecture์ ์ ์์ ์๋ ๋ค๋ฅธ ํฌ์คํ ์๋ ์์ฃผ ์ธ๊ธ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ๊ฒ ๋ค.clean architecture๋ ์ํํธ์จ์ด ์์คํ ์ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ ๋ ์ง์ผ์ผ ํ ์์น๊ณผ ๋ฐฉ๋ฒ์ ์ ์ํ ๊ฐ๋ .๋ณต์กํ ์ํํธ์จ์ด ์์คํ ์ ๋ณด๋ค ๊ด๋ฆฌ ๊ฐ๋ฅํ๊ณ ์ ์ง ๋ณด์ ๊ฐ๋ฅํ ํํ๋ก ๊ตฌ์ถํ๊ธฐ ์ํ ์ง์นจ์ ์ ๊ณตํ๋ค. ๊ฐ๋จํ๊ฒ ์์ฝํ์๋ฉด, ๊ท๋ชจ๊ฐ ํฐ ์ํํธ์จ์ด๋ฅผ ์ค๊ณํ ๋ ์ง์ผ์ผ ํ๋ ๊ตฌ์กฐ ๊ฐ์ ๊ฑฐ๋ผ๊ณ ์ดํดํ๋ฉด ๋ ๊ฒ ๊ฐ.. 2024. 11. 8. [Android, Kotlin] RecyclerView๋ฅผ ListAdapter๋ฅผ ์ด์ฉํด ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ด๋ฒ ํฌ์คํ ์๋ ๋ด์ผ๋ฐฐ์์บ ํ์์ ๊ณต๋ถํ๋ฉด์ ์๊ฒ ๋ ListAdapter๋ฅผ ์ฌ์ฉํ๋ฉด์ ์๊ฒ ๋ ListAdapter๋ฅผ ์ด์ฉํด RecyclerView๋ฅผ ๊ตฌํํ ์์ ๋ฅผ ์ฌ์ฉ๋ฒ๊ณผ ํจ๊ป ์ ์ด๋ณด๊ฒ ๋ค.์ฌ์ค ๊ธ์์ผ ํน๊ฐ์ ์ ๋ถ ๋ฃ์ง ๋ชปํด์ ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ ๋ด์ฉ๊ณผ ๋ ธ์ ์ ์ ํ ๊ธ, ๋ นํ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํด์ ์ ์ ํผํฉ๋ฌผ(?)์ด๋ค. ListAdapter๋ฅผ ์์๋ณด๊ธฐ ์ ์ ์ ListAdapter๊ฐ ์๊ธฐ๊ฒ ๋์๋์ง ๊ฐ๋จํ๊ฒ ์์๋ณด์. ์์ ์ RecyclerView ์๋ ์ฒด์ ๊ธฐ์กด์ RecyclerView์์๋ ์ฌ์ฉ์๊ฐ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ, ์ญ์ ํ๊ณ ์ ํ ๋, adapter์ notifyDataSetChanged()๋ฅผ ์ฌ์ฉํด adapter์ ๋ฆฌ์คํธ๊ฐ ๋ณ๊ฒฝ๋์์์ ์๋ ค์ผ ํ๋ค.์๋ฆผ์ ๋ฐ์ adpater์์๋ ์ถ๊ฐ, ์ญ์ ๋ ๋ฐ์ดํฐ.. 2024. 7. 15. [Android] ์๋๋ก์ด๋ ์คํ๋์ค์์ ๋ฌด์ ๋๋ฒ๊น ์ด ๋์ง ์์ ๋, ์๋์ผ๋ก ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ ์๋ ํ์์ฃ ?ํ์ฌ์ํ์ ํ๋๋ผ ๋๋ฌด ์ค๋๋ง์ ํฌ์คํ ์ ํ๊ฒ ๋์๋ค.์์ผ๋ก๋ ์ต์ 2์ฃผ์ 1๋ฒ์ฉ์ ํฌ์คํ ์ ํด๋ณด๋๋ก ๋ ธ๋ ฅํด ๋ณด๊ฒ ๋ค. ๋ด๊ฐ ์ด์ ์ ์ด ๋ฌธ์ ๋๋ฌธ์ ์ ๋จน์๋ค๊ฐ ์ต๊ทผ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ๋๋ฌธ์ ์ ๊น๋จน๊ธฐ ์ํด ํฌ์คํ ์ ๋จ๊ธด๋ค.์ด๋ฒ์ ํด๊ฒฐํ ๋ฌธ์ ๋ android studio์์ ๋ฌด์ ๋๋ฒ๊น (wifi, pairing code)์ด ๋์ํ์ง ์์ ๋, ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ์ด๋ณด๊ฒ ๋ค. ๋์ํ์ง ์๋ ๋ฌด์ ๋๋ฒ๊น ์ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ช๋ช์ ํด๊ฒฐ์ฑ ์ด ์์๋๋ฐ(๋ฐฉํ๋ฒฝ ํด์ , android studio ์ฌ์์ ๋ฑ๋ฑ) ๋์๊ฒ ์ ์ฉ๋์ง ์์์ cmd(๋ช ๋ น ํ๋กฌํฌํธ)๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๋ฐ ํด๊ฒฐ์ด ๋์๋ค. 1. platform-tools๋ก ์ด๋ํ๊ธฐ์ฐ์ ๋ช ๋ น ํ๋กฌํฌํธ๋ฅผ ์ผ ํ์์ ์ด ์ค์นํ.. 2024. 4. 6. [Android, Kotlin] Retrofit์์ LocalDateTime ๋ฐ์ดํฐ ๋ฐ์์ค๊ธฐ 1. ์ค๋ฅ ์ํฉ retrofit์์ localDateTime ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ์ค ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค. ์์ ์ค๋ฅ๋ LocalDateTime parsing์์ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ๋ฐ์ํ๋ ์ค๋ฅ์ด๋ค. ์ด ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ํ์๋ ๊ฒ์์ ๊ธฐ๋ฐ์ผ๋ก gson์ ๊ธฐ์กด์ localDatetime์ parsing ํ๋ ์์ ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์๋ค. val gson = GsonBuilder() .setDateFormat("yyyy-MM-dd'T'HH:mm:ss") .create() return GsonConverterFactory.create(gson) ์์ ๋ฐฉ๋ฒ์ ๋์๊ฒ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด ์๋์๋ค. ๊ทธ๋ฌ๋ ๋๋ ํ ๋ธ๋ก๊ทธ์์ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์๋ค. https://lemontia.tistory.com/997 [r.. 2023. 11. 6. [Android] ์๋๋ก์ด๋ ํ๋ก์ ํธ์ Sha Key๋ฅผ ์์๋ด๋ ๋ฐฉ๋ฒ ์ด๋ฒ ํฌ์คํ ์์๋ ์๋๋ก์ด๋ ํ๋ก์ ํธ์์ sha-1 ํค๋ฅผ ์์๋ด๋ ๋ฐฉ๋ฒ์ ์์๋ณผ๊น ํ๋ค. ์ด ๊ธ์ ๋ณด์๋ ๋ถ๋ค์ sha-1 key๋ฅผ ๋ณด๋ ๊ฒ ๊ธํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํด ๋ฐ๋ก ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๋๋ก ํ๊ฒ ๋ค. 1. sha ํค ๋ฐ๊ธ๋ฐ๊ธฐ ์๋๋ก์ด๋ ์คํ๋์ค ์ค๋ฅธ์ชฝ ๋ถ๋ถ์ ๋ณด๋ฉด, gradle์ ํฌํจํด ๋ค์ํ ํญ์ ์ด ์ ์๋ ๋ถ๋ถ์ด ์๋ค. ์ฌ๊ธฐ์์ gradle์ ํด๋ฆญํด์ ๋ค์ด๊ฐ๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด์ด ๋์ฌ ๊ฒ์ด๋ค. ์ด ํ๋ฉด์ด ์ ์์ ์ผ๋ก ๋ด์ผ๋ฉด, Execute Gradle Task๋ผ๋ ์๋์ icon๋ค ์ค ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ icon์ ํด๋ฆญํด ์ค๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์จ๋ค. ์์ ์ ๋ ฅํ๋ ๊ณณ์ signingReport๋ฅผ ์ ๋ ฅํ๊ณ ์ํฐ๋ฅผ ๋๋ฅด๋ฉด sha-1 key๋ sha-256 key๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ ์๋ค. ์ด์ .. 2023. 10. 12. [Android, Kotlin] Compose์์ glance๋ฅผ ์ด์ฉํด ์์ ฏ ๋ง๋ค๊ธฐ ์ด๋ฒ์ ๊ณต๋ถํ ๋ด์ฉ์ compose๋ก ์์ ฏ์ ๋ง๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ glance์ด๋ค. glance์ ์กด์ฌ(?)๋ ์ด์ ์ ๋ค์ผ๋ฌ ๊ฐ๋ ์ปจํผ๋ฐ์ค ๊ฐ์ฐ์์ glance์ ๊ด๋ จ๋ ๊ฐ์ฐ์ ๋ค๊ฒ ๋์๋๋ฐ, ๊ทธ๋๋ถํฐ ๊ธฐํ๊ฐ ๋๋ฉด ๊ณต๋ถํด ๋ณด์ ๋ผ๋ ์๊ฐ์ ํ๊ฒ ๋์๋ค. ๊ทธ๊ฒ ์ง๊ธ์ด๋ค. glance๋ compose์์ ์์ ฏ์ ์ฝ๊ฒ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ณ 2023๋ 8~9์์ 1.0.0์ ์ถ์ํ ๋ฐ๋๋ฐ๋ํ ์ ์(?) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ์๋ฌดํผ ๊ทธ๋์ ์ด๋ฒ์ compose glance๋ฅผ ๊ณต๋ถํ ๋ด์ฉ์ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค. ๊ทธ๋ผ ๋ฐ๋ก glance ์ฌ์ฉ๋ฒ์ ์์๋ณด์. 1. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐํ๊ธฐ ๋จผ์ glance ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด ์ค๋ค. // glance implementation("androidx.glance:gla.. 2023. 10. 6. [Android, Kotlin] android์์ Junit์ผ๋ก ํ ์คํธ ์ฝ๋ ์์ฑํ๊ธฐ ์ด๋ฒ์ ์ ๋ฆฌํ ๋ด์ฉ์ ํ ์คํธ ์ฝ๋์ด๋ค. ๋ค๋ค ํ ์คํธ ์ฝ๋๋ผ๋ ๋ง์ ๋ค์ด๋ณธ ์ ์ ์์ด๋ ์ฌ์ฉ๋ฒ์ ๋ชฐ๋ผ์ ์ฌ์ฉํ์ง ์์๋ ๊ฒฝ์ฐ๋ ์์์ ๊ฒ์ด๊ณ , ์ฅ์ ์ ๋ํด์๋ ๋ค์์ง๋ง ํ ์๋ฟ์ง ์์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์์์ ์๋ ์์ ๊ฒ์ด๋ค. ํ์์ ๊ฒฝ์ฐ์๋ 2๊ฐ์ง ๋ชจ๋ ํด๋น์ฌํญ์ด์๋ค ใ ใ ํ์ง๋ง ์ด๋ฒ์ ์น๊ตฌ๋ค์ด๋ ํ๋ ๋ํ ํ๋ก์ ํธ์์ ํํธ๋ณ ๊ฐ๋ฐ์ ํ๋ ์ค ๋ด๊ฐ ์ฝ๋๋ฅผ ์ ์์ฑํ๊ณ ์๋ ๊ฑธ๊น?๋ผ๋ ์๋ฌธ์ด ๋ค์ด ํ ์คํธ ์ฝ๋์ ๋ํด ๊ณต๋ถํ๊ณ ์ด๋ฒ ๊ธฐํ์ ํฌ์คํ ์ผ๋ก ๋จ๊ฒจ๋ณผ๊น ํ๋ค. ๊ทธ๋ฌ๋ฉด ๋ฐ๋ก ํ ์คํธ ์ฝ๋์ ๋ํด ๊ฐ๋จํ ์์๋ณด๊ณ ์ฝ๋ ์์ ๋ก ๊ฐ์ด ํ์ธํด ๋ณด๋๋ก ํ์. 1. ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ด์ ? ํ ์คํธ ์ฝ๋๋ ์๋๋ก์ด๋ ์ฑ์ ๊ฐ๋ฐํ๋ฉด์ ํน์ ๋ก์ง์ ํ ์คํธํ๋ฉด์ ๊ธฐ๋ฅ์ ๋ฌธ์ ๋ ์ค๋ฅ๋ฅผ ์ฐพ์๋ด ์ฃผ๋ ์ฝ๋๋ฅผ ๋ปํ๋ค. ํ ์ค.. 2023. 9. 28. [Android, Kotlin] ์๋๋ก์ด๋์์ line chart ๋ง๋ค๊ธฐ ์ด๋ฒ์ ๊ณต๋ถํ ๋ด์ฉ์ android studio์์ ์ฐจํธ(๊ทธ๋ํ)๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถํด ๋ณด์๋ค. ์ด๋ฒ ํฌ์คํ ์ ์ฐจํธ ๋ง๋ค๊ธฐ์ ๋ํด ๊ณต๋ถํ๋ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค. ์ฌ์ค ์๋ ์๋ ์ฐจํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝํ์ด ์์์ง๋ง, ์ด๋ฒ์ ๋ค์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒผ๊ธฐ์ ์ด๋ฒ ๊ธฐํ์ ์ ๋ฆฌํด ๋ณด๋ ค ํ๋ค.(์๋ ์ ๊ณต๋ถํ๋ ๋ด์ฉ์ ๊ฑฐ์ ๋ค ๊น๋จน์ด์ ์ฒ์๋ถํฐ ๋ค์ ๊ณต๋ถํ์๋ค >:( ) ์ฐจํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ค์ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๋ค๋ฅธ ๋ถ๋ค์ด ๋ง๋ค์ด์ค ์ฐจํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํธํ ๊ฒ์ด๋ค. ๊ทธ๋ฅ android chart library๋ผ๊ณ ๊ฒ์ํด๋ ๋ค๋ฅธ ๋ถ๋ค์ด ์ด๋ฏธ ๋ง๋ค๊ณ ์ฌ์ฉ ์ค์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค์ ์กด์ฌํ๋ค. ์๋๋ฉด ์์ ์ด ์ง์ custom ํด์ ๋ง๋ค๊ณ ์ถ์ผ๋ฉด android์์ ์ ๊ณตํ๋ canvas๋ฅผ ์ด์ฉํด .. 2023. 9. 28. [Android, Kotlin] jetpack navigation์์ safe args๋ก ๋ฐ์ดํฐ ์ ๋ฌํ๊ธฐ ์ต๊ทผ ํฌ์คํ ์์ compose์์ jetpack navigation์ ์ด์ฉํ ๋, data class type์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ๋ ๋ฐฉ๋ฒ์ ์์๋ดค์๋ค. ์ ๊ธฐ์ ์ ์ต๊ทผ์ xml์์ ํ ๋ฒ ๋ ์ฌ์ฉํ ์ผ์ด ์์๋๋ฐ, ์ด๋ฆ์ด safe args๋ผ๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ์๋ง compose์์ ์ฌ์ฉํ ๊ธฐ์ ๋ safe args๋ก ๋ถ๋ฆฌ๋ ๋ฏํ๋ค. https://rkdrkd-history.tistory.com/57 [Android, Kotlin] compose navigation์์ data class tpye ๋๊ธฐ๊ธฐ compose์์ navigation์ ์ฌ์ฉํ ๋, ํ๋ฉด ์ ํ ์ ๋ณํ๋ ํ๋ฉด์ ๊ธฐ์กด์ ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ด ๋์๋ Navcontroller.navigate()์๋ค๊ฐ ๋๊ธธ.. 2023. 9. 26. [Android, Kotlin] android์์ in-app updates๋ก ์ฑ ์ ๋ฐ์ดํธ ๊ด๋ฆฌํ๊ธฐ ์ด๋ฒ์ ์ ๋ฆฌํ ์ฃผ์ ๋ ๋ฐ๋ก ์ฑ ์ ๋ฐ์ดํธ์ ๊ดํ ์ฌํญ์ด๋ค. ๋ด๊ฐ ์ด๋ฒ์ ์ฑ ์ ๋ฐ์ดํธ์ ๊ดํด ์ ๋ฆฌ๋ฅผ ํ ์ด์ ๋ ํ์๊ฐ ์ฑ์ ํ๋ ์ถ์ํ์๋๋ฐ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋๋ฐ ์ฌ์ฉ์๋ค์ด ์ฑ ์ ๋ฐ์ดํธ๋ฅผ ํ์ง ์๊ณ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ง์ด ๋ณด์๊ธฐ ๋๋ฌธ์ด๋ค. 0. ์ ์ฌ์ฉํด์ผ ํ ๊น? ์ด๋ฐ ๊ฒฝ์ฐ ์ฑ ์ ๋ฐ์ดํธ๋ฅผ ํ์ง ์์๋ ์๊ด์๋ค๋ ์ด์ผ๊ธฐ๋ ํ ์ ์๋ค. ํ์ง๋ง ์ ๋ฐ์ดํธ๋ฅผ ํ์ง ์์ผ๋ฉด ์ ๋ฒ์ ์ ์ถ์ํ๋ฉด์ ์์ ํ๋ ์ค๋ฅ๋ฅผ ์ ๋ฐ์ดํธ๋ฅผ ํ์ง ์์ ๊ธฐ์กด ์ฑ์์๋ ๊ทธ๋๋ก ์ค๋ฅ๊ฐ ๋จ์์์ ํ๋ฅ ์ด ๋๋ค. ๊ทธ๋์ ์ด๋ฒ ๊ธฐํ์ ๊ตฌ๊ธ์์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ in-app updates๋ฅผ ์ด์ฉํด์ ์ฌ์ฉํ๋ ๊ฒฝํ์ ๊ธฐ๋ก์ผ๋ก ๋จ๊ฒจ๋ณด๋๋ก ํ๊ฒ ๋ค. 1. in-app updates๋ ๋ฌด์์ผ๊น? in-app updates๋ ๊ตฌ๊ธ์์ ์ ๊ณตํ๊ณ ์๋ ์ฌ์ฉ์๊ฐ ์ฑ ๋ด.. 2023. 9. 9. [Android, Kotlin] exoplayer์ media3๋ฅผ ์ด์ฉํด ์์ ์ฌ์ํ๊ธฐ ์ด๋ฒ์๋ ํ์๊ฐ ์์ฃผ ์์ฒญํ๋ youtube๋ฅผ ๋ณด๊ณ youtube๊ฐ exoplayer๋ฅผ ์ด์ฉํด ์ ์๋์๋ค๋ ๋ง์ ๋ค์๊ธฐ ๋๋ฌธ์ ์ด๋ฒ ๊ธฐํ์ exoplayer๋ฅผ ๊ณต๋ถํด ๋ณด๊ธฐ๋ก ํ๋ค. ์ด๋ฒ์ exoplayer ์์ ๋ ํ๋ก์ ํธ ์์ mp4 ํ์ผ์ ๋ถ๋ฌ์ค๋ ๊ณผ์ ์ ๋ด์๋ค. ์ฐธ๊ณ ๋ก ํ์ฌ ์์ฃผ ์ฌ์ฉํ๋ compose๋ฅผ ์ด์ฉํด ๊ตฌํํด ๋ณด๊ฒ ๋ค. exoplayer๋ ๋ฌด์์ผ๊น? exoplayer๋ android์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฏธ๋์ด ์ฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. 1. dependency ์ถ๊ฐ exoplayer์ media3์ ์ฌ์ฉํ๊ธฐ ์ํด dependency๋ฅผ ์ถ๊ฐํ๋ค. // exoplayer compose implementation("com.google.android.exoplayer:exoplayer:2.19.1") impl.. 2023. 8. 25. [Android] MVI ํจํด์ ๋ฌด์์ผ๊น? ์์ฆ์ compose๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์ถ์ธ์ด๋ค. ํ์๋ compose๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณ ์๋ค. ํ์๊ฐ ์ง์ธ๋ค์๊ฒ compose์ mvi๋ฅผ ์ฌ์ฉํ๋ฉด ์ข๋ค๋ ์์์ ๋ฃ๊ณ ๋ฐ๋ก mvi ๊ณต๋ถ๋ฅผ ์์ํ๋ค. ์ง๊ธ ๋ฐ๋ก mvi์ ๋ํด ์์๋ณด์. 1. mvi๋? mvi ์ํคํ ์ฒ๋ mvc, mvp, mvvm์ ๊ฐ์ ์๋๋ก์ด๋ ๊ฐ๋ฐ์๋ค์ ๊ฐ๋ฐ๊ณผ ์ ์ง ๋ณด์๋ฅผ ํธ๋ฆฌํ๊ฒ ํด์ฃผ๋ ์ํคํ ์ฒ ํจํด์ ์ผ์ข ์ด๋ผ ํ ์ ์๋ค. mvi์ ๊ตฌ์กฐ๋ model - view - intent๋ก ๊ตฌ์ฑ๋๋ฉฐ ๊ฐ layer๋ ์๋ก ์์ ํ ๊ด์ฌ์ฌ๊ฐ ๋ถ๋ฆฌ๋์ด ์๋ค. sideEffects๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ (api ํต์ , ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์ฒ๋ฆฌํ ๋ก์ง)๊ณผ ์ธ์คํด์ค ๋ทฐ(screen ๊ฐ ์ด๋, toast์ dialog)๋ฑ์ ์ฒ๋ฆฌํ๋ค. sideEffects.. 2023. 8. 21. [Android, Kotlin] compose custom theme ๋ง๋ค๊ธฐ ์ด๋ฒ ํฌ์คํ ์ ์ง๋ ํฌ์คํ ์์ ๋งํ๋ค์ํผ ์ปค์คํ ํ ๋ง์ ๋ํ ๊ฐ๋จ ์ค๋ช ๊ณผ ์ฝ๋๋ฅผ ์๋ ค์ฃผ๋๋ก ํ๊ฒ ๋ค. ์ปค์คํ ํ ๋ง๋ฅผ ์ ๋ง๋ค์ด์ผ ํ๋์ง ๊ถ๊ธํ ์ฌ๋๋ค์ด ์์ ๊ฒ ๊ฐ์ ๊ฐ๋จํ ์ค๋ช ํ์๋ฉด ๋ํ ํ๋ก์ ํธ๋ฅผ ํ๋ค ๋ณด๋ฉด color๊ฐ ๋ค์ํด์ง ์ ์๊ธฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก android studio์์ ์ ๊ณตํ๋ color palette๊ฐ ๋ถ์กฑํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋์์ด๋๊ฐ ์ ํ color๋ช ์ ๊ทธ๋๋ก ์ ์ฉํ๊ธฐ ํ๋ค๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ด ๋์๋ custom theme๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณผ ์ ์๋ค. ๊ทธ๋์ ํ์๋ ์ด๋ฒ ๋ํ ํ๋ก์ ํธ์ ๋๋นํด ์ปค์คํ ํ ๋ง๋ฅผ ์ ์ํด ๋ณด๊ธฐ๋ก ํ๋ค. ์ ๊ทธ๋ผ ์ด์ ์ฝ๋๋ก ํ์๊ฐ custom theme๋ฅผ ๋ง๋ค์๋ ๊ณผ์ ์ ํ์ธํด ๋ณด์. ์์ํ๊ธฐ ์ ์! ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ theme ์ํ๋ฅผ ํ์ธํ ์ ์๋ en.. 2023. 8. 18. [Android, Kotlin] compose๋ก custom checkbox ๋ง๋ค๊ธฐ ์ด๋ฒ์ design system์ ๋ง๋๋ ์์ ์ ํ๊ณ ์์๋๋ฐ checkbox๋ฅผ ๋ง๋ค์ด์ผ ํ ์ผ์ด ์์๋ค. ์ด๋ฒ์ ํ์ ๊ฐ์ ๊ฒฝ์ฐ ๋ง๊ณ ๋ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ํ ๋์๋ checkbox๋ฅผ ์ฌ์ฉํด์ผ ํ ์ผ์ด ์์ ๊ฒ์ด๋ค. ํ์ง๋ง ๊ธฐ๋ณธ checkbox์ ๋ชจ์์ผ๋ก๋ ๋ง์กฑ์ค๋ฝ์ง ๋ชปํ ๊ฒฝ์ฐ๋ ์์ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ด๋ฒ์ ํ์๋ custom checkbox๋ฅผ ๋ง๋ค์ด ๋ณด์๋ค. ํ์๊ฐ checkbox๋ฅผ ์ด๋ป๊ฒ ๋ง๋ค์๋์ง ์ฝ๋๋ฅผ ํตํด ํ์ธํด ๋ณด์. 1. custom checkbox๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ค๋น๋ฌผ(?) ์ผ๋จ ์ฒ์ ๋ง๋ค ๋ ํ์๋ custom dialog๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋ฌด์์ด ํ์ํ์ง ์๊ฐํด ๋ณด์๋ค. ๊ทธ๋์ ํ๋์ ๊ฒฐ๋ก ์ ๋๋ฌํ๋ค! check ๋์์ ๋์ checkbox layout, check ๋์ง ์์์ ๋์ chec.. 2023. 8. 18. [Android, Kotlin] compose๋ก tablayout ๊ตฌํํ๊ธฐ ์ด๋ฒ์ youtube open api๋ฅผ ๋ค๋ฃจ๋ฉด์ xml์์ ์ฌ์ฉํ๋ tablayout์ ์ ์ฉํ๊ณ ์ถ์ด์ ์ด๋ฒ ํฌ์คํ ์์๋ compose tablayout ๊ธฐ๋ฅ์ ๊ตฌํํด ๋ณด๋๋ก ํ๊ฒ ๋ค. compose์์ tablayout ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๊ฒ ํด์ฃผ๋ composable function์ tabRow์ด๋ค. tabrow๋ list๋ฅผ ์ด์ฉํด ํ๋ฉด(tab) ๊ฐ์ ์ด๋์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ผ๋ก bottom navigation๊ณผ ๋น์ทํ๋ค. ์ด๋ฒ์ tabrow๋ฅผ ์ฌ์ฉํด ๋ณด์๋๋ฐ ๊ธฐ์กด์ xml์์๋ screen๋ง๋ค fragment๋ฅผ ํ์์ ์ผ๋ก ์์ฑํด์ ์ฐ๊ฒฐํด์ผ ํ์๋๋ฐ, compose์์๋ ๋ฐ๋ก screen์ ๋ง๋ค์ง ๋ง์ง ๊ฐ๋ฐ์๊ฐ ์ ํ ์ ์์ด์ ํธํ๋ ๊ฒ ๊ฐ๋ค. ์ด๋ฒ ๊ธฐํ์ ํ์๋ screen์ ์์ฑํ์ง ์์ ta.. 2023. 8. 15. [Android, Kotlin] compose navigation์์ data class tpye ๋๊ธฐ๊ธฐ compose์์ navigation์ ์ฌ์ฉํ ๋, ํ๋ฉด ์ ํ ์ ๋ณํ๋ ํ๋ฉด์ ๊ธฐ์กด์ ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ด ๋์๋ Navcontroller.navigate()์๋ค๊ฐ ๋๊ธธ ๋ฐ์ดํฐ๋ฅผ param์ผ๋ก ๋ฃ์ ๋ค์์ NavHost์์ composable()๋ก navigate logic์ ์์ฑํ๋ฉด ๋์๋ค. navigation ์ค ๋ฐ์ดํฐ ์ ๋ฌ์ ๊ดํ ์์ธํ ์ค๋ช ์ ์๋ ํฌ์คํ ์ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๋ฏํ๋ค. https://rkdrkd-history.tistory.com/51 [Android, Kotlin] Compose UI ์ ๋ฆฌ(7) ์ด์ ํฌ์คํ https://rkdrkd-history.tistory.com/50 [Android, Kotlin] Compose UI ์ ๋ฆฌ(6) ์ด๋ฒ ํฌ์คํ .. 2023. 8. 11. [Android, Kotlin] compose์์ api ํต์ ํ๊ธฐ ์ด์ ํฌ์คํ ์ ์ฐ์ฅ์ ์ ๋๋ค. https://rkdrkd-history.tistory.com/55 [Android, Kotlin] Android clean architecture ํ๋ก์ ํธ์์ api ์๋ฌ ํธ๋ค๋งํ๊ธฐ clean architecture ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ํ๊ณ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด api error ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํ๊ณ ์๋๊ฐ? ์์ ์ ํ์๋ ๊ทธ๋ฅ ๋ฌด์ง์ฑ์ผ๋ก(?) presentation layer์ try catch๋ฅผ ์ด์ฉํด ์ฒ๋ฆฌ๋ฅผ ํ์์๋ค. ํ์ง๋ง ๊ทธ ๋ฐฉ๋ฒ์ rkdrkd-history.tistory.com ์ด์ ํฌ์คํ ์์ clean architecture ๊ด์ ์์ api error handling ๋ฐฉ๋ฒ์ ๊ณต๋ถํด ๋ดค๋๋ฐ, ์ด๋ฒ ๊ธ์์๋ ์ง๋ ๊ธ์ ์ฐ์ฅ์ ์ธ clean architecture ๊ด์ ์์ compo.. 2023. 8. 3. [Android, Kotlin] Android clean architecture ํ๋ก์ ํธ์์ api ์๋ฌ ํธ๋ค๋งํ๊ธฐ clean architecture ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ํ๊ณ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด api error ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํ๊ณ ์๋๊ฐ? ์์ ์ ํ์๋ ๊ทธ๋ฅ ๋ฌด์ง์ฑ์ผ๋ก(?) presentation layer์ try catch๋ฅผ ์ด์ฉํด ์ฒ๋ฆฌ๋ฅผ ํ์์๋ค. ํ์ง๋ง ๊ทธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ ๋, ์ผ์ผ์ด try catch๋ฌธ์ ์์ฑํด์ผ ํ๋ ๋ถํธํจ๊ณผ presentation layer์์๋ง ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ง๋ ์ด๋ฐ ์๋ฌธ๋ค์ด ๋ค๊ธฐ ์์ํ๋ค. ๊ทธ๋์ ์ด๋ฒ ํฌ์คํ ์์ clean architecture project์์ api error handling logic์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๊ณต๋ถํ๊ณ ์ ์ด๋ณด์๋ค. 1. error handling ๋ก์ง์ ์ด๋ค layer์ ์์ฑ๋์ด์ผ ํ๋๊ฐ?? ํ์๋ data layer์์ http status code์ ๋ฐ๋ฅธ ์.. 2023. 8. 1. ์ด์ 1 2 3 ๋ค์ 728x90 ๋ฐ์ํ