๋ชฉ๋กandroid (11)

๐Ÿ’ป ๊ฐœ๋ฐœ์ฐจ๊ธฐ ๐Ÿฅ‹ feat.Android

Clean Architecture์„ ์œ„ํ•œ ๊ฐ์ฒด์ง€ํ–ฅ SOLID 5์›์น™ with Kotlin

์ด๋ฒˆ์— ๋ฐฐ์šธ ๊ฒƒ - SOLID๋ž€ - ์›์น™๋ณ„ ์˜ˆ์ œ - ๊ฒฐ๋ก  SOLID๋ž€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ดํ•ด๊ฐ€ ์‰ฌ์šด, ์œ ์—ฐํ•œ, ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ SW(Soft-Ware: ์†Œํ”„ํŠธ์›จ์–ด)๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์˜๋„ ๋˜์–ด์ง„ ๋””์ž์ธ ์›์น™์ด๋‹ค. SOLID ์›์น™์€ ์š”๊ตฌํ•œ ๊ธฐ๋Šฅ์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ ์กด์žฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์„ ๋–„, ์‹œ์Šคํ…œ์˜ ํฐ ๋ณ€๊ฒฝ ์—†์ด, ์ง€์† ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. SOLID๋Š” 5๊ฐ€์ง€ ์›์น™์˜ ์ œ์ผ ์ฒซ ๊ธ€์ž๋ฅผ ๋”ฐ์„œ ๋งŒ๋“ค์—ˆ๋‹ค. - S : Single Resposibility Priciple / ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ - O : Open Closed Principle / ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ - L : Liskov Substitution Principle / ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ - I : I..

Development 2023. 7. 17. 01:08
Compose - Typegraphy๋กœ TextStyle ์ผ๊ด„ ์ง€์ •(Feat. textSize๋ฅผ dp๋กœ)

๋””์ž์ธ QA๋ฅผ ํ•˜๋˜์ค‘ ์‹œ์Šคํ…œ ์„ค์ •์—์„œ ๊ธ€์ž ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ ์‹œ์Šคํ…œ ์„ค์ • ๊ฐ’์„ ๋”ฐ๋ผ๊ฐ€์ง€ ์•Š๊ณ  ๋ชจ๋“  ๊ธฐ๊ธฐ ๋˜‘๊ฐ™์ด ๋…ธ์ถœํ•ด๋‹ฌ๋ผ. Compose์—์„œ Text์˜ fontSize๋ฅผ sp๋กœ ์ง€์ •ํ•˜๊ฒŒ ๋˜๋ฉด ์‹œ์Šคํ…œ ์„ค์ •์„ ๋”ฐ๋ผ๊ฐ€๊ฒŒ ๋˜๊ณ  dp๋กœ ์„ค์ •ํ•ด์•ผ๋งŒ ์ ˆ๋Œ€๊ฐ’์œผ๋กœ ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. ๊ทผ๋ฐ TextStyle๋กœ ๋ชจ๋‘ ๊ณ ์ •์‹œ์ผœ์„œ style์— ์ง€์ •ํ•ด์ฃผ๊ณ  ์žˆ๋˜ ๋‚œ dp๋กœ ์„ค์ •ํ•˜๋ ค๊ณ  ๋‚œ๋ฆฌ๋ฅผ ์น˜๋‹ค ๊ฒฐ๊ตญ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•˜๊ฒŒ ๋๋‹ค. ์ด๋ฒˆ์— ๋ฐฐ์šด ๊ฒƒ! 1. Compose์—์„œ๋Š” fontSize๋ฅผ ์ •ํ•  ๋•Œ sp๋ฅผ ์„ ์–ธํ•ด์ค˜์•ผํ•œ๋‹ค. 2. ๊ผญ dp๋กœ fontSize๋ฅผ ์„ ์–ธํ•ด์ค˜์•ผ ํ•œ๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์„ ์–ธ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. (๋ฌด์กฐ๊ฑด Composable ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ๋งŒ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์ด๋‹ค) 3. ํ•˜์ง€๋งŒ ๋””์ž์ด๋„ˆ์™€ ์ผํ•˜๋ฉด์„œ textStyle ..

Development/Compose 2023. 6. 9. 17:20
๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋Š” ๋‹น์‹  ํ˜น์€ ๋‚˜์—๊ฒŒ

๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋Š”๋ฐ ํ•ญ์ƒ ๋ณด๊ธฐ๋งŒ ํ•ด์˜ค๋˜ ๊ฒƒ์„ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š” ์‹ฌ์ •์ด๋ž€. ์œ ํŠœ๋ธŒ๋ฅผ ๋งค์ผ ๋ณด์ง€๋งŒ ๊ทธ๊ฑธ ์ง์ ‘ ๋‚ด๊ฐ€ ๋งŒ๋“ ๋‹ค๋ฉด? ์ด๋ผ๋Š” ๋งˆ์Œ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ง„์ž… ์žฅ๋ฒฝ์ด ์ƒ๊ฐ๋ณด๋‹ค ๋†’๋‹ค. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ง„์ž… ์žฅ๋ฒฝ ํ˜น์€ ๊ฑฑ์ •์„ ๋‚˜์—ดํ•ด๋ณด์ž๋ฉด - ์š”์ฆ˜ ๋งŽ์ด ์“ฐ๋Š” ๋ฐˆ๊ณผ ํ•จ๊ป˜ ์žฌ๋ฐŒ๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค. - ์ดˆ๋ณด์ฒ˜๋Ÿผ ๋ณด์ด๊ณ  ์‹ถ์ง€ ์•Š๋‹ค. - ์ œ๋Œ€๋กœ ๋œ ๊ธ€์„ ์“ฐ์ง€ ์•Š์œผ๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์š•ํ•˜์ง€ ์•Š์„๊นŒ? - ์•„ ์–ด๋–ค ์ฃผ์ œ๋กœ ๊ธ€์„ ์“ฐ์ง€? ๋“ฑ๋“ฑ... ์ง€์ด์ด์ธ์งœ ๊ณ ๋ฏผ์„ ์ˆ˜๋ฐฑ๋ฒˆ ํ•˜๊ณ  ๊ธ€์„ ์ผ๋‹ค ์ง€์› ๋‹ค๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ž‘๊ฐ€๊ฐ€ ๋˜๋ฉด ์ด๋Ÿฐ ๋А๋‚Œ์ธ๊ฐ€? ๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ค ์ •๋„์˜€๋‹ค. ์œ„์— ๊ฑฑ์ •๋“ค์„ ํ•˜๋‚˜์”ฉ ํ’€์–ด๋ณด์ž๋ฉด, - ์š”์ฆ˜ ๋งŽ์ด ์“ฐ๋Š” ๋ฐˆ๊ณผ ํ•จ๊ป˜ ์žฌ๋ฐŒ๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค. ์ด๊ฑด ๋ญ ํ•ด๋ณด๋ฉด ๋œ๋‹ค. ๊ทผ๋ฐ ์‚ฌ์ง„์„ ์ฐพ๊ธฐ๋„ ํ•ด์•ผํ•˜๊ณ  ๊ณ„์†ํ•ด์„œ ๋ฐˆ์„ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์‚ฌ์šฉํ•ด๋ณด๋ฉด..

Development 2023. 4. 28. 19:05
Databinding ์—์„œ ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ฐ€๊ณตํ• ๊นŒ? ๐Ÿฝ

Databinding์„ ์‚ฌ์šฉ ํ•˜๊ณ ์žˆ์–ด! ๋˜ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์“ฐ๋Š”์ง„ ์•Œ๊ฒ ์–ด. ๊ทผ๋ฐ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋“ค์„ ์–ด๋–ป๊ฒŒ ๊ฐ€๊ณตํ•ด์„œ ๋ฐ”๋กœ ์จ? ์‹œ๊ฐ„์ด๋‚˜ ํšŸ์ˆ˜ ๋ญ ํ•˜๋ฌผ๋ฉฐ ์‚ฌ์šฉ์ž ์„ฑ๋ณ„์ด๋ผ๋„ ๊ฐ€๊ณตํ•ด์„œ ๋ณด์—ฌ์ค˜์•ผํ•˜๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€? ๊ทธ๋Ÿผ ๋˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ฃผ์ž…ํ•ด์ค˜์•ผํ•˜๋Š”๊ฑฐ ์•„๋‹ˆ์•ผ? ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ… ์•„~์ฃผ ์ข‹์€ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.(์ด๋Ÿฌ๋ฉด ๋’ท๋ง์ด ๊ถ๊ธˆํ•ด์„œ ๋ฒ—์–ด๋‚˜๊ธฐ ํž˜๋“ค๋‹ค ๐Ÿคฆ‍โ™‚๏ธ) 1. ์ผ๋‹จ ์‚ฌ์šฉํ•  Data class๋ฅผ ๋งŒ๋“ ๋‹ค. data class Memo( // @SerializedName("id") object ์ค‘ ํ•ด๋‹น ๊ฐ’์ด null ๊ฒฝ์šฐ // -> json ์œผ๋กœ ๋งŒ๋“ค ํ•„๋“œ๋ฅผ ์ž๋™ ์ƒ๋žต @SerializedName("id") @Expose val id: Int, โ€‹ @SerializedName("title") @Expose val me..

Development/Android 2022. 9. 18. 01:00
๐Ÿ“ฆ Databinding์„ ์“ฐ๋ฉด์„œ - 2

์ด๋ฒˆ์—” RecyclerView ViewPager image ๋“ค์„ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด Databinding์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ ์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต RecyclerView๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Adapter ๋ฐ˜๋ณต๋  Layout RecyclerView๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ์˜ ์„ ์–ธ ๋“ค์ด ํ•„์š”ํ•œ๋ฐ Databinding์„ ์ด์šฉํ•˜๋ฉด ์•ฝ๊ฐ„์”ฉ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. (๊ธฐ๋ณธ์ ์ธ RecyclerView๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ „์ œํ•˜์— ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ™‡‍โ™‚๏ธ) 1. ๊ฐ€์žฅ ๋จผ์ € ๋ฐ˜๋ณตํ•˜์—ฌ ์‚ฌ์šฉํ•  Layout์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. โ€‹ โ€‹ โ€‹ โ€‹ โ€‹ โ€‹ โ€‹ ์œ„์™€ ๊ฐ™์ด ๋ฐ”์ธ๋”ฉ์œผ๋กœ ๋ฌถ์–ด์ฃผ๊ณ  ์‚ฌ์šฉํ•  item(data class) ๋ชจ๋ธ์„ variable๋กœ ์„ ์–ธ ํ•ด์ค๋‹ˆ๋‹ค. ์„ ์–ธํ•œ item์œผ๋กœ ๊ฐ View์— ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. (์นด์นด์˜ค ์ฃผ์†Œ์ฐพ๊ธฐ api๋ฅผ ์‚ฌ์šฉํ•จ ๐Ÿ•บ๐Ÿผ) 2. A..

Development/Android 2022. 9. 8. 18:53
๐Ÿ“ฆ Databinding์„ ์“ฐ๋ฉด์„œ - 1

Databinding์ด๋ž€!(๋ฐ์ดํ„ฐ ๋ฌถ๊ธฐ?) → ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ์˜ data binding ์ด๋ž€, Android Archictecture Components ์˜ ํ•œ ๋ถ€๋ถ„์œผ๋กœ์„œ Ui ์š”์†Œ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ํ”„๋กœ๊ทธ๋žจ์  ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ , ์„ ์–ธ์  ํ˜•์‹์œผ๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด MVVMํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ Activity๋‚˜ Fragment์—์„œ ๋ทฐ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋“ค์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  xml ์ฝ”๋“œ์— ์ง‘์–ด ๋„ฃ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์„ ViewModel์—์„œ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋” ๋” ๋” ํ”ผ๋ถ€์— ์™€๋‹ฟ๊ฒŒ ๋งํ•˜์ž๋ฉด Activity๋‚˜ Fragment์—์„œ ๋งŽ์€ ์ฝ”๋“œ๋“ค์„ ์ ์ง€ ์•Š๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ทฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋ณ€ํ™˜์‹œํ‚ค๋Š” ์ฝ”๋“œ๋Š” ViewModel์—์„œ ๊ด€๋ฆฌํ•ด์„œ Activity & Fragment ๋“ค์˜ ์ฝ”๋“œ๋Š” ๋”์šฑ ..

Development/Android 2022. 9. 8. 18:39