ํ‹ฐ์Šคํ† ๋ฆฌ

๐ŸŒฑ 111_Commit
๊ฒ€์ƒ‰ํ•˜๊ธฐ

๋ธ”๋กœ๊ทธ ํ™ˆ

๐ŸŒฑ 111_Commit

devyo-111commit.tistory.com/m

๋ށ์š” ๋‹˜์˜ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

๊ตฌ๋…์ž
12
๋ฐฉ๋ช…๋ก ๋ฐฉ๋ฌธํ•˜๊ธฐ

์ฃผ์š” ๊ธ€ ๋ชฉ๋ก

  • [Kotlin][Android] Base RecyclerView Adapter ๋งŒ๋“ค๊ธฐ (feat. Android TV List ๊ตฌํ˜„ํ•˜๊ธฐ) ์•ˆ๋…•ํ•˜์„ธ์š” ๋„ˆ๋ฌด ์˜ค๋žœ๋งŒ์— ํฌ์ŠคํŒ…์„ ์˜ฌ๋ฆฌ๋„ค์š”!! ํ•œ๋™์•ˆ ํšŒ์‚ฌ์—์„œ ๋ฆฌํŒฉํ† ๋ง ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด ์ผ์ด ๋ฐ”๋นด๋„ค์š”.. ์ด์ œ ๋‹ค์‹œ ๊พธ์ค€ํžˆ ํฌ์ŠคํŒ… ์˜ฌ๋ ค๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ . . ์ œ๊ฐ€ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ํŠน์„ฑ์ƒ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ์š”! ๊ฒฐ๊ตญ, ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ๋“ค์— ๋™์ผํ•œ ๋™์ž‘์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฒผ๊ณ , ๋งค๋ฒˆ ๋™์ž‘๋“ค์„ ์ถ”๊ฐ€ํ•˜๋‹ค ๋ณด๋‹ˆ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ๋ฐœ์ƒํ•˜์—ฌ ๊ฐ Adapter์˜ BaseClass๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ๊ด€๋ จํ•ด์„œ ๊ณต์œ ํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค! 1. BaseViewHolder ๋งŒ๋“ค๊ธฐ abstract class BaseViewHolder(binding: VB) : RecyclerView.ViewHolder(binding.root) { abstract val binding: VB a.. ๊ณต๊ฐ์ˆ˜ 86 ๋Œ“๊ธ€์ˆ˜ 57 2024. 1. 12.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ ENUM์— ๋Œ€ํ•ด์„œ(IntDef , StringDef์˜ ์‚ฌ์šฉ๋ฒ•) ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ํšŒ์‚ฌ์—์„œ ์—…๋ฌด๋ฅผ ํ•˜๋˜ ์ค‘ enum class ์‚ฌ์šฉ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์œผ๋ฉฐ ์ƒˆ๋กญ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋œ @IntDef , @StringDef์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ํฌ์ŠคํŒ… ํ•ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Ž Kotlin ๋ฐ Java์—์„œ ๊ณ ์ •๋œ ๊ฐ’์„ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ๋กœ ์ƒ์ˆ˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ƒ์ˆ˜๋“ค์„ ํƒ€์ž…์œผ๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„๋•Œ๋Š” enum class๋ฅผ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ด๋“ค ์žˆ์—ˆ์„ ๊ฒ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Android์—์„œ enum class๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์•ฑ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ณ  ํผํฌ๋จผ์Šค์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉ์„ ์ง€์–‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, TV๋‚˜ AVN๊ฐ™์€ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๋Š” ๊ธฐ๊ธฐ์—์„œ๋Š” ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! (์ฐธ๊ณ ์ž๋ฃŒ๋Š” ์•„๋ž˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.) Android Perfo.. ๊ณต๊ฐ์ˆ˜ 17 ๋Œ“๊ธ€์ˆ˜ 20 2023. 7. 10.
  • [Kotlin][Android] SharedFlow์™€ StateFlow ํ™œ์šฉํ•˜๊ธฐ (feat. UIState ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ‘œ์‹œํ•˜๊ธฐ) ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์ด์ „ ํฌ์ŠคํŒ…์—์„œ LiveData๋ฅผ Coroutine Flow๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ์š” ๊ด€๋ จ ํฌ์ŠคํŒ…์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š” :) [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ Coroutine Flow ์ ์šฉํ•˜๊ธฐ (2) ( LiveData๋ฅผ Flow๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ : LiveData ์™€ Flow ๋น„๊ต ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์ €๋ฒˆ ํฌ์ŠคํŒ…์— ์ด์–ด LiveData๋ฅผ Flow๋กœ ์ด์ „ํ•˜๋Š” ๊ณผ์ •์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, LiveData์™€ Flow์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ๋„ ํ•จ๊ป˜ ๋‹ค๋ค„๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค ๐Ÿ˜ƒ ์ด์ „ ํฌ์ŠคํŒ…์€ ์•„ devyo-111commit.tistory.com ์˜ค๋Š˜์€ SharedFlow์™€ StateFlow๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ™”๋ฉด์„ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•˜๋Š”์ง€ UIState๋กœ ๊ด€๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ .. ๊ณต๊ฐ์ˆ˜ 23 ๋Œ“๊ธ€์ˆ˜ 12 2023. 7. 5.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ Coroutine Flow ์ ์šฉํ•˜๊ธฐ (2) ( LiveData๋ฅผ Flow๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ : LiveData ์™€ Flow ๋น„๊ตํ•˜๊ธฐ ) ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์ €๋ฒˆ ํฌ์ŠคํŒ…์— ์ด์–ด LiveData๋ฅผ Flow๋กœ ์ด์ „ํ•˜๋Š” ๊ณผ์ •์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, LiveData์™€ Flow์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ๋„ ํ•จ๊ป˜ ๋‹ค๋ค„๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค ๐Ÿ˜ƒ ์ด์ „ ํฌ์ŠคํŒ…์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค. ๐Ÿ™ [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ Coroutine Flow ์ ์šฉํ•˜๊ธฐ (1) (๋„คํŠธ์›Œํฌ ํ†ต์‹  Flow๋กœ ์ด์ „ํ•˜๊ธฐ) ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ MVVMํŒจํ„ด์—์„œ Flow๋ฅผ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜Ž Flow์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํฌ์ŠคํŒ…์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค ๐Ÿ™ [Kotlin] ์ฝ”ํ‹€๋ฆฐ Coroutine์— ๋Œ€ํ•˜์—ฌ (3) - devyo-111commit.tistory.com LiveData๋ฅผ Flow๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ์— ์•ž์„œ ๋‘˜์˜ ์ฐจ์ด์ ๊ณผ ์™œ Flow.. ๊ณต๊ฐ์ˆ˜ 17 ๋Œ“๊ธ€์ˆ˜ 12 2023. 3. 23.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ Coroutine Flow ์ ์šฉํ•˜๊ธฐ (1) (๋„คํŠธ์›Œํฌ ํ†ต์‹  Flow๋กœ ์ด์ „ํ•˜๊ธฐ) ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ MVVMํŒจํ„ด์—์„œ Flow๋ฅผ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜Ž Flow์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํฌ์ŠคํŒ…์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค ๐Ÿ™ [Kotlin] ์ฝ”ํ‹€๋ฆฐ Coroutine์— ๋Œ€ํ•˜์—ฌ (3) - Coroutine Flow(ํ”Œ๋กœ์šฐ) ์•ˆ๋…•ํ•˜์„ธ์š”๐Ÿ‘‹ ์˜ค๋Š˜์€ ์ฝ”๋ฃจํ‹ด ๊ด€๋ จ ๋งˆ์ง€๋ง‰ ํฌ์ŠคํŒ…์œผ๋กœ ์ฝ”๋ฃจํ‹ด Flow์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. 1. Coroutine Flow๋ž€? Flow๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ’์„ ๋‚ด๋ณด๋‚ด๊ณ  ์ •์ƒ์ ์œผ๋กœ ๋˜๋Š” ์˜ˆ์™ธ๋กœ ์™„๋ฃŒ๋˜ devyo-111commit.tistory.com ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ด์ „ Clean Architecture์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์„ ํ•  ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ ์˜ˆ์ œ๋ฅผ Flow๋กœ ์ด์ „ํ•˜๋ฉฐ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์˜ˆ์ œ์˜ ์ „์ฒด ์ฝ”๋“œ ๋ฐ ์„ค๋ช…์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ.. ๊ณต๊ฐ์ˆ˜ 13 ๋Œ“๊ธ€์ˆ˜ 5 2023. 3. 22.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ ListAdapter์™€ DiffUtil , AsyncListDiffer๋ฅผ ํ™œ์šฉํ•œ RecyclerViewAdapter ๊ตฌํ˜„ํ•˜๊ธฐ ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ RecyclerView๋ฅผ ์ข€ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ListAdapter, DiffUtil , AsyncListDiffer์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € RecyclerView์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์€ ์•„๋ž˜์—์„œ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๐Ÿ™ [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ RecyclerView(๋ฆฌ์‹ธ์ดํด๋Ÿฌ ๋ทฐ)์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ• ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ RecyclerView์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. RecyclerView(๋ฆฌ์‹ธ์ดํด๋Ÿฌ ๋ทฐ)๋ž€? RecyclerView๋Š” ListView์ฒ˜๋Ÿผ ์ œํ•œ๋œ ํ™”๋ฉด(Window)์— ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์…‹์„ ๋ณด์—ฌ์ค„ ๋•Œ ์‚ฌ์šฉํ•ฉ devyo-111commit.tistory.com DiffUtil์ด๋ž€? RecyclerView๋ฅผ ์‚ฌ์šฉํ• ๋•Œ Recycl.. ๊ณต๊ฐ์ˆ˜ 3 ๋Œ“๊ธ€์ˆ˜ 2 2023. 2. 3.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ Hilt๋ฅผ ํ†ตํ•œ ์˜์กด์„ฑ ์ฃผ์ž…๋ฐฉ๋ฒ• ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ Hilt์˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Hilt๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋จผ์ € ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด๋ž€? ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€ class์™€class ๊ฐ„ ์˜์กด์„ฑ์— ๋Œ€ํ•œ ์ฃผ์ž…์„ ์™ธ๋ถ€์—์„œ ํ•จ์œผ๋กœ์จ class ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”์–ด ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์„ ์˜๋ฏธ ํ•ฉ๋‹ˆ๋‹ค. /** ์˜์กด์„ฑ์ด ์ฃผ์ž…๋˜์ง€ ์•Š์€ ์ฝ”๋“œ **/ class Foo(){ val noDI = NoDepedency() fun somethingTodo() { noDI.foo() } } class NoDependency(){ fun foo() } ์˜์กด์„ฑ์ด ์ฃผ์ž…๋˜์ง€ ์•Š์€ ์ฝ”๋“œ๋Š” ์œ„ ์ฝ”๋“œ์™€ ๊ฐ™์ด NoDepedency๋ผ๋Š” class๋ฅผ Foo์—์„œ .. ๊ณต๊ฐ์ˆ˜ 3 ๋Œ“๊ธ€์ˆ˜ 0 2023. 1. 14.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ ItemTouchHelper์— ๋Œ€ํ•ด์„œ (Drag and Drop ๊ณผ Swipe ๊ตฌํ˜„ํ•˜๊ธฐ) ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ItemTouchHelper๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ItemTouchHelper๋ž€? ItemTouchHelper๋Š” RecyclerView์— ์‚ญ์ œ๋ฅผ ์œ„ํ•œ Swipte ๋ฐ Drag and Drop์„ ์ง€์›ํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ItemTouchHelper๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์…˜์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” RecyclerView ๋ฐ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜๋Š” ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ๋Š” Callback ํด๋ž˜์Šค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Ž ์ด๋ฒˆ ์—์ œ์—์„œ๋Š” ItemTouchHelper์™€ RecyclerView๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. RecyclerView์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์€ ์•„๋ž˜ ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ˆ ํ•จ๊ป˜ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. [Kotlin][A.. ๊ณต๊ฐ์ˆ˜ 4 ๋Œ“๊ธ€์ˆ˜ 4 2023. 1. 2.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ RxBinding์— ๋Œ€ํ•ด์„œ(RxBinding์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•) ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์ œ๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ ์‚ฌ์šฉํ–ˆ๋˜ RxBinding์— ๋Œ€ํ•ด์„œ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € RxBinding์ด๋ž€? RxBinding์€ RxJava์™€ RxAndroid๋ฅผ ์ด์šฉํ•ด ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ์œ„์ ฏ์ด๋‚˜ View์— Rx๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋ก  TextWatcher์˜ ๊ธฐ๋Šฅ์ด๋‚˜ Button Click ์ด๋ฒคํŠธ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Rxbinding์„ ํ†ตํ•ด ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” Operator๋“ค๋กœ๋Š” throttleFirst() , debounce()๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ํ•จ์ˆ˜์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์šฐ์„  ์„ค๋ช… ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. throttleFirst() ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ์•ˆ์— ์ผ์–ด๋‚˜๋Š” ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๋“ค์€ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋œ ์ด๋ฒคํŠธ๋งŒ ๋ฐฉ์ถœํ•˜๊ณ  ๊ทธ ์ดํ›„์— ๋“ค์–ด์˜จ ์ด๋ฒคํŠธ๋Š” ๋ฌด์‹œํ•˜๋Š” Operator์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น .. ๊ณต๊ฐ์ˆ˜ 2 ๋Œ“๊ธ€์ˆ˜ 2 2022. 12. 21.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ Room์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ Room์˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. Room์ด๋ž€? ์Šค๋งˆํŠธํฐ ๋‚ด์žฅ DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ORM(Object Relational Mapping)๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. Room์€ DB ๋ฐ์ดํ„ฐ๋ฅผ Java ๋˜๋Š” ์ฝ”ํ‹€๋ฆฐ ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•ด์ฃผ๋ฉฐ, SQLite๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ DB๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์˜ ํŽธ์˜์„ฑ์„ ๋†’์—ฌ์ฃผ์–ด ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค. Room์˜ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ room์˜ ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ Database , DAO , Entity๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” Room์˜ ๊ตฌ์กฐ์ด๋ฉฐ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Entity(์—”ํ‹ฐํ‹ฐ) DB ๋‚ด์˜ Table๋กœ class์˜ ๋ณ€์ˆ˜๋“ค์ด ์นผ๋Ÿผ(column)์ด ๋˜์–ด Table์ด ์ƒ์„ฑ.. ๊ณต๊ฐ์ˆ˜ 3 ๋Œ“๊ธ€์ˆ˜ 0 2022. 12. 16.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ ์นด์นด์˜ค๋งต API ์‚ฌ์šฉํ•˜๊ธฐ - POI์ •๋ณด ํ™œ์šฉํ•˜์—ฌ ๋งต์— PIN ์ƒ์„ฑํ•˜๊ธฐ ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์ €๋ฒˆ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ ์นด์นด์˜ค ๋งต API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ง€๋„์— PIN์„ ์ฐ๋Š” ๋ฒ•์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค! ์นด์นด์˜ค ๋งต API์˜ ๊ธฐ๋ณธ ์„ค์ • ๋ฐ API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ง€๋„๋ฅผ ๋„์šฐ๋Š” ๋ฐฉ๋ฒ•์€ ์ด์ „ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” ๐Ÿ˜Ž [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ ์นด์นด์˜ค๋งต API ์‚ฌ์šฉํ•˜๊ธฐ - ์นด์นด์˜ค๋งต ํ™”๋ฉด์— ๋„์šฐ๊ธฐ ์•ˆ๋…•ํ•˜์„ธ์š” ์˜ค๋Š˜์€ ์นด์นด์˜ค ๋งต API๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์œ„์น˜์ •๋ณด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” API๋Š” ๋งŽ์ง€๋งŒ ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์นด์นด์˜ค ๋งต์ด ๋ฌธ์„œ๊ฐ€ ์ž˜ ์ •๋ฆฌ๋˜์–ด์žˆ๋‹ค๊ณ  ์ƒ๊ฐ devyo-111commit.tistory.com ์นด์นด์˜ค ๋งต API์—์„œ๋Š” ํ‚ค์›Œ๋“œ์— ๋”ฐ๋ฅธ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” API๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋ฌธ์„œ๋Š” https://apis.map.kakao.com/andr.. ๊ณต๊ฐ์ˆ˜ 3 ๋Œ“๊ธ€์ˆ˜ 0 2022. 11. 28.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ ์นด์นด์˜ค๋งต API ์‚ฌ์šฉํ•˜๊ธฐ - ์นด์นด์˜ค๋งต ํ™”๋ฉด์— ๋„์šฐ๊ธฐ ์•ˆ๋…•ํ•˜์„ธ์š” ์˜ค๋Š˜์€ ์นด์นด์˜ค ๋งต API๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์œ„์น˜์ •๋ณด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” API๋Š” ๋งŽ์ง€๋งŒ ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์นด์นด์˜ค ๋งต์ด ๋ฌธ์„œ๊ฐ€ ์ž˜ ์ •๋ฆฌ๋˜์–ด์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋ฐ”๋กœ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ๊นŒ์š”?? API ์„ค์ • 1. ๋จผ์ € Kakao Developers๋กœ ๊ฐ€์„œ ๋กœ๊ทธ์ธ์„ ํ•ด์ค๋‹ˆ๋‹ค. Kakao Developers ์นด์นด์˜ค API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ด๋ณด์„ธ์š”. ์นด์นด์˜ค ๋กœ๊ทธ์ธ, ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ, ์นœ๊ตฌ API, ์ธ๊ณต์ง€๋Šฅ API ๋“ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. developers.kakao.com 2. ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋“ค์–ด๊ฐ€ ์•ฑ์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. 3. ์ƒ์„ฑ๋œ ์•ฑ์—์„œ ํ”Œ๋žซํผ์„ ๋“ฑ๋กํ•ด์ค๋‹ˆ๋‹ค. ํ”Œ๋žซํผ ๋“ฑ๋ก์‹œ์— ํŒจํ‚ค์ง€๋ช…์€ AndroidManifestํŒŒ์ผ์˜ package๋ช….. ๊ณต๊ฐ์ˆ˜ 4 ๋Œ“๊ธ€์ˆ˜ 2 2022. 11. 25.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ MVVM ํŒจํ„ด์— ๋Œ€ํ•ด์„œ - Retrofit์œผ๋กœ ์ „์†ก๋ฐ›์€ ๊ฐ’์„ MVVM๊ตฌ์กฐ ์ ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๊ธฐ ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ MVVM ํŒจํ„ด์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. MVVM ํŒจํ„ด์ด๋ž€? MVVM ํŒจํ„ด์€ Model, View, ViewModel์„ ๋ถ„๋ฆฌํ•ด View์™€ Model ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ค„์—ฌ์ฃผ๋Š” ํŒจํ„ด์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. View ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ โฌ‡๏ธ ViewModel View์—์„œ ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ•จ์ˆ˜ ๋“ฑ์„ ํ˜ธ์ถœ โฌ‡๏ธ Model ViewModel์—์„œ ์š”์ฒญํ•˜๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ โฌ‡๏ธ ViewModel ๋ชจ๋ธ์—์„œ ๋ฐ˜ํ™˜๋ฐ›์€ ๊ฐ’์„ LiveData๋กœ ๊ฐ์‹ธ์คŒ โฌ‡๏ธ View ๋ผ์ด๋ธŒ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์ถœ๋ ฅ ๊ทธ๋ ‡๋‹ค๋ฉด.. ์™œ MVVMํŒจํ„ด์„ ์‚ฌ์šฉํ• ๊นŒ์š”? ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ ํŒจํ„ด์œผ๋ก  MVC , MVP ํŒจํ„ด์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. MVC์˜ ๊ฒฝ์šฐ View์™€ Controller๋ฅผ ์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ์— Vie.. ๊ณต๊ฐ์ˆ˜ 2 ๋Œ“๊ธ€์ˆ˜ 0 2022. 11. 10.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ REST ํ†ต์‹  - Retrofit2(๋ ˆํŠธ๋กœํ•)์˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ Rest ํ†ต์‹ ์„ ํ•˜๋Š” ๋ฒ•๊ณผ Retrofit2์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. REST(’RE’presentational ‘S’tate ‘T’ransfer)๋ž€? HTTP URI(Uniform Resource Identifier)๋ฅผ ํ†ตํ•ด ์ž์›(Resource)์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method(POST, GET, PUT, DELETE)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด Retrofit2์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? Retrofit2 ๋ž€? OkHttp๋ฅผ ๋งŒ๋“  Square์‚ฌ์—์„œ ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ Annotation์„ ์ด์šฉํ•˜์—ฌ REST๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (OkHttp๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ reflect๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ) ๊ทธ.. ๊ณต๊ฐ์ˆ˜ 3 ๋Œ“๊ธ€์ˆ˜ 0 2022. 11. 7.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ Coroutine(์ฝ”๋ฃจํ‹ด) ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋”ฉ ํ™”๋ฉด(๋‹ค์ด์–ผ๋กœ๊ทธ) ๋งŒ๋“ค๊ธฐ ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์ฝ”๋ฃจํ‹ด์„ ํ™œ์šฉํ•˜์—ฌ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ๋กœ๋”ฉ ํ™”๋ฉด(๋‹ค์ด์–ผ๋กœ๊ทธ)์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋ฃจํ‹ด์˜ ๊ธฐ๋ณธ์ ์ธ ์„ค๋ช…๊ณผ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜ ํฌ์ŠคํŒ…๋“ค์— ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…๋˜์–ด ์žˆ์œผ๋‹ˆ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค ๐Ÿ˜Ž [Kotlin] ์ฝ”ํ‹€๋ฆฐ Coroutine(์ฝ”๋ฃจํ‹ด)์— ๋Œ€ํ•˜์—ฌ (1) - CoroutineScope์™€ CoroutineContext ๋ฐ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฐฉ๋ฒ• ์•ˆ๋…•ํ•˜์„ธ์š” ์˜ค๋Š˜์€ ์ฝ”ํ‹€๋ฆฐ์˜ Coroutine์— ๋Œ€ํ•˜์—ฌ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. Coroutine์ด๋ž€? ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„๋ฅผ Routine์ด๋ผ ํ•˜๋Š”๋ฐ ๊ฐ Routine์ด ํ˜‘์—…(Co)ํ•˜์—ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์„ ํ•ฉ์น˜๊ฒŒ devyo-111commit.tistory.com [Kotlin] ์ฝ”ํ‹€๋ฆฐ Coroutine(์ฝ”๋ฃจํ‹ด)์— ๋Œ€ํ•˜์—ฌ (2) - ์ฝ”.. ๊ณต๊ฐ์ˆ˜ 4 ๋Œ“๊ธ€์ˆ˜ 2 2022. 11. 1.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ RecyclerView(๋ฆฌ์‹ธ์ดํด๋Ÿฌ ๋ทฐ)์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ• ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ RecyclerView์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. RecyclerView(๋ฆฌ์‹ธ์ดํด๋Ÿฌ ๋ทฐ)๋ž€? RecyclerView๋Š” ListView์ฒ˜๋Ÿผ ์ œํ•œ๋œ ํ™”๋ฉด(Window)์— ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์…‹์„ ๋ณด์—ฌ์ค„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ListView๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ View๋ฅผ ๊ณ„์† ์ƒˆ๋กœ ์ƒ์„ฑ ํ•˜์ง€๋งŒ RecyclerView๋Š” ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋œ View๋ฅผ ๊ณ„์† '์žฌํ™œ์šฉ(Recycle)' ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ListView์— ๋น„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ ์œผ๋กœ ํšจ์œจ์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. RecyclerView.ViewHolder RecyclerView๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” View์˜ ViewHolder๋กœ View์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. RecyclerViewAdapter๋ฅผ ํ†ตํ•ด ViewHol.. ๊ณต๊ฐ์ˆ˜ 2 ๋Œ“๊ธ€์ˆ˜ 0 2022. 10. 28.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ Fragment(ํ”„๋ž˜๊ทธ๋จผํŠธ)์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฐ ์‚ฌ์šฉ๋ฐฉ๋ฒ• ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋ž˜๊ทธ๋จผํŠธ์— ๋Œ€ํ•˜์—ฌ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. Fragment(ํ”„๋ž˜๊ทธ๋จผํŠธ)๋ž€? ํ”„๋ž˜๊ทธ๋จผํŠธ๋Š” ์ž์ฒด ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ , ์ž์ฒด ์ž…๋ ฅ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์œผ๋ฉฐ, ์•กํ‹ฐ๋น„ํ‹ฐ ์‹คํ–‰ ์ค‘์— ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ๋ชจ๋“ˆ์‹ ์„น์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค(๋‹ค๋ฅธ ์•กํ‹ฐ๋น„ํ‹ฐ์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” "ํ•˜์œ„ ์•กํ‹ฐ๋น„ํ‹ฐ"์™€ ๊ฐ™์€ ๊ฐœ๋…). Fragment(ํ”„๋ž˜๊ทธ๋จผํŠธ)์˜ ์ƒ๋ช…์ฃผ๊ธฐ ํ”„๋ž˜๊ทธ๋จผํŠธ๋„ ์•กํ‹ฐ๋น„ํ‹ฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์•กํ‹ฐ๋น„ํ‹ฐ์— ์ข…์†๋˜์–ด ์žˆ๋Š” ๋งŒํผ ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๊ด€๋ จ์ด ๊นŠ์Šต๋‹ˆ๋‹ค. ์œ„ ์‚ฌ์ง„์€ ํ”„๋ž˜๊ทธ๋จผํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋ž˜๊ทธ๋จผํŠธ๋„ Create , Start , Pause , Stop , Destroy๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ ์กด์žฌํ•˜์ง€๋งŒ ํ”„๋ž˜๊ทธ๋จผํŠธ ๋‚ด๋ถ€ vie.. ๊ณต๊ฐ์ˆ˜ 4 ๋Œ“๊ธ€์ˆ˜ 0 2022. 10. 20.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ BroadcastReceiver(๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋ฆฌ์‹œ๋ฒ„)์— ๋Œ€ํ•˜์—ฌ ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ ์˜ค๋Š˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฆฌ์‹œ๋ฒ„์— ๋Œ€ํ•˜์—ฌ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. BroadcastReceiver(๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฆฌ์‹œ๋ฒ„)๋ž€? Android ๊ตฌ์„ฑ์š”์†Œ ๊ฐ„์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์—ฌ๋Ÿฌ ๋Œ€์ƒ๋“ค์—๊ฒŒ ํ•œ๊บผ๋ฒˆ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌ ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ์˜ 4๋Œ€ ์ปดํฌ๋„ŒํŠธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.( ๊ตฌ์„ฑ์š”์†Œ ๊ฐ„ ๋ฉ”์‹œ์ง€๋Š” Intent๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.) BroadcastReceiver ๋™์  ๋“ฑ๋ก๊ณผ ์ •์  ๋“ฑ๋ก ์ •์  ๋ฆฌ์‹œ๋ฒ„๋Š” ์•ฑ์ด ์ข…๋ฃŒ๊ฐ€ ๋œ ํ›„์—๋„ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋ฅผ ๋ฐ›์œผ๋ฉด ํ•ด๋‹น Intent์— ๋Œ€ํ•˜์—ฌ ์‚ฌ์ „์— ์„ธํŒ…ํ–ˆ๋˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, ๋™์  ๋ฆฌ์‹œ๋ฒ„๋Š” ์•ฑ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ค‘์—๋งŒ ๋ฐฉ์†ก์„ ๋ฐ›์•„ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ๋ฆฌ์‹œ๋ฒ„ ์ƒ์„ฑ ๋ฐฉ๋ฒ• class SilenceBroadcastRece.. ๊ณต๊ฐ์ˆ˜ 6 ๋Œ“๊ธ€์ˆ˜ 0 2022. 10. 19.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ Service(์„œ๋น„์Šค)์— ๋Œ€ํ•˜์—ฌ ์•ˆ๋…•ํ•˜์„ธ์š” ์˜ค๋Š˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ์˜ Service์— ๋Œ€ํ•˜์—ฌ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. Service(์„œ๋น„์Šค)๋ž€? ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค ์ฆ‰, ํ™”๋ฉด์—์„œ๋Š” ๋ณด์ด์ง€ ์•Š์ง€๋งŒ ๋’ค์—์„œ ์ง€์†์ ์œผ๋กœ ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. โœ”๏ธ ์„œ๋น„์Šค๋Š” ๋กœ์ปฌ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์„œ๋น„์Šค( startService( ) )์™€ ์›๊ฒฉ์—์„œ ์‹คํ–‰๋˜๋Š” ์„œ๋น„์Šค( bindService( ) )๊ฐ€ ์กด์žฌ Service(์„œ๋น„์Šค)์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์œ„ ์ด๋ฏธ์ง€๋Š” ์„œ๋น„์Šค์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚˜๋Š” ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋„ Activity์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ ๋กœ์ปฌ ์„œ๋น„์Šค์™€ ์›๊ฒฉ ์„œ๋น„์Šค์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Local์—์„œ ๋™์ž‘ํ•˜๋Š” ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ startService()๋กœ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ .. ๊ณต๊ฐ์ˆ˜ 4 ๋Œ“๊ธ€์ˆ˜ 0 2022. 10. 14.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ Activity(์•กํ‹ฐ๋น„ํ‹ฐ)์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ํ•จ์ˆ˜ - onCreate() ์ตœ์ดˆ๋กœ Activity๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ์ฒ˜์Œ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ดˆ๊ธฐํ™” ๊ด€๋ จ ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Log.d(TAG , "MainActivity - onCreate") } - onStart() ์ตœ์ดˆ๋กœ Activity๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, onCreate() ๋‹ค์Œ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. onStop() -> onRestart() ๋‹ค์Œ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ ๋ถ€ํ„ฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. override fun onStart() { su.. ๊ณต๊ฐ์ˆ˜ 1 ๋Œ“๊ธ€์ˆ˜ 0 2022. 10. 14.
  • [Android] ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ๋ผ์ด๋ธŒ ํƒฌํ”Œ๋ฆฟ(Live Templates) ์‚ฌ์šฉ๋ฐฉ๋ฒ• Live Templates ๋ผ์ด๋ธŒ ํ…œํ”Œ๋ฆฟ, ์ง์—ญํ•˜์ž๋ฉด ์‚ด์•„์žˆ๋Š” ํ˜•ํŒ(ํ…œํ”Œ๋ฆฟ)์œผ๋กœ ๊ธฐ๋Šฅ ์ƒ์œผ๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด, ํŠน์ • ์ถ•์•ฝํ˜• ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด ์ž์ฃผ ์“ฐ๋Š” ์ฝ”๋“œ ๊ตฌ์„ฑ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด ์ƒ์šฉ๊ตฌ. ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ ํ…œํ”Œ๋ฆฟ ์ค‘์—์„œ๋„ ์œ ์šฉํ•œ ๊ฒƒ๋“ค์ด ๊ฝค ๋งŽ์Šต๋‹ˆ๋‹ค. (๋ฌผ๋ก  ์‚ฌ์šฉ์ž ์ปค์Šคํ…€๋„ ๊ฐ€๋Šฅ) ์˜ค๋Š˜์€ ์ปค์Šคํ…€ ๋ผ์ด๋ธŒ ํƒฌํ”Œ๋ฆฟ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 1. preference๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋“ค์–ด๊ฐ€์ค€๋‹ค. 2. ์šฐ์ธก Add๋ฅผ ํด๋ฆญํ•˜์—ฌ Live Templates๋ฅผ ํด๋ฆญ ํ•ด์ค๋‹ˆ๋‹ค. 3. ์œ„์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค.(์ฒ˜์Œ ์ž…๋ ฅํ•˜์‹œ๋Š” ๋ถ„๋“ค์€ ํ•˜๋‹จ์— define์„ ํด๋ฆญํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋žซํผ์„ ์ฒดํฌ ํ•ด์ค๋‹ˆ๋‹ค. ๊ธ€์“ด์ด๋Š” kotlin์„ ์‚ฌ์šฉํ•˜๊ธฐ์— kotlin์— ์ฒดํฌ ํ•จ) * $CLASS_N.. ๊ณต๊ฐ์ˆ˜ 0 ๋Œ“๊ธ€์ˆ˜ 0 2022. 10. 14.
  • [Kotlin][Android] ์•ˆ๋“œ๋กœ์ด๋“œ ๋กœํ‹ฐ์• ๋‹ˆ๋ฉ”์ด์…˜(Lottie Animation) ํ™œ์šฉํ•˜๊ธฐ ๋จผ์ € ๋กœํ‹ฐ์• ๋‹ˆ๋ฉ”์ด์…˜์ด๋ž€ After Effect์—์„œ ์ œ์ž‘ํ•œ Motion Graphic์„ ์–ดํ”Œ๋ฆฌ์ผ€์…˜์—์„œ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์จ OOM(OUT OF MEMORY)์— ๋Œ€ํ•ด์„œ๋„ ์‹ ๊ฒฝ์„ ๋งŽ์ด ์“ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค. ๋กœํ‹ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ์— ์•ž์„œ ๋ชจ๋“ˆ gradle ํŒŒ์ผ์— dependency๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. dependencies { ... def lottieVersion = '์‚ฌ์šฉํ•  ๋ฒ„์ „' implementation "com.airbnb.android:lottie:$lottieVersion" ... } ์œ„์™€ ๊ฐ™์ด ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋˜๋ฉฐ ๊ธ€์“ด์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋‹น์‹œ ์ตœ์‹ ๋ฒ„์ „์„ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ์ •๋ณด๋Š” http://airbnb.io/lottie/#/android?id=sample-app๋ฅผ ํ†ตํ•ด ํ™•.. ๊ณต๊ฐ์ˆ˜ 1 ๋Œ“๊ธ€์ˆ˜ 0 2022. 3. 21.
    ๋ฌธ์˜์•ˆ๋‚ด
    • ํ‹ฐ์Šคํ† ๋ฆฌ
    • ๋กœ๊ทธ์ธ
    • ๊ณ ๊ฐ์„ผํ„ฐ

    ํ‹ฐ์Šคํ† ๋ฆฌ๋Š” ์นด์นด์˜ค์—์„œ ์‚ฌ๋ž‘์„ ๋‹ด์•„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    ยฉ Kakao Corp.