๊นจ์•Œ ๊ฐœ๋… ๐Ÿ“‘/Android 83

[Android] Jetpack Compose - State Remembering

#1 ๊ฐœ์š” ์ƒํƒœ ๋ฐ Jetpack Compose  |  Android Developers์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒํƒœ ๋ฐ Jetpack Compose ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. ์•ฑ์˜ ์ƒํƒœ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผdeveloper.android.comState๊ฐ€ ๊ฐ€์ง€๋Š” ์œ„์น˜ ์ œ์•ฝ ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์ œ์•ฝ์„ ํ•ด์†Œํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณธ๋‹ค. #2 ์ฝ”๋“œ#2-1 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ (State object์˜ ์œ„์น˜ ์ œ์•ฝ)@Composablefun ButtonExample(modifierParam: Modifier = Modifier) {    val count = mutableStateOf(0)    Button(     ..

[Android] Jetpack Compose - State ๊ธฐ์ดˆ

#1 ๊ฐœ์š” ์ƒํƒœ ๋ฐ Jetpack Compose  |  Android Developers์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒํƒœ ๋ฐ Jetpack Compose ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. ์•ฑ์˜ ์ƒํƒœ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผdeveloper.android.comJetpack Compose์˜ State ๊ฐœ๋…์— ๋Œ€ํ•ด ์‚ดํŽด๋ณธ๋‹ค. #2 ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์œผ๋กœ์„œ์˜ State๋จผ์ €, State๋ผ๋Š” ์šฉ์–ด ์ž์ฒด์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. Jetpack Compose์—์„œ ์“ฐ์ด๋Š” State๊ฐ€ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์œผ๋กœ์„œ์˜ State ๋ง์ด๋‹ค. ์ƒํƒœ๋ผ๋Š” ๋ง๋กœ ๋ฒˆ์—ญ๋˜๋Š” State๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ƒํƒœ, ์ฆ‰ ์‹œ๊ฐ„์ด ํ๋ฆ„์— ๋”ฐ๋ผ ๋ณ€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฐ’์œผ๋กœ ๋‹ค๋ฆ„..

[Android] Jetpack Compose - Lazy Column

#1 Lazy Column#1-1 ๊ฐœ์š” ๋ชฉ๋ก ๋ฐ ๊ทธ๋ฆฌ๋“œ  |  Jetpack Compose  |  Android Developers์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ๋ก ๋ฐ ๊ทธ๋ฆฌ๋“œ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. ๋งŽ์€ ์•ฑ์—์„œ ํ•ญ๋ชฉ์˜ ์ปฌ๋ ‰์…˜์„ ํ‘œ์‹œํ•ดdeveloper.android.comLazy lists๋Š” Jetpack Compose ๋ฒ„์ „์—์„œ์˜ RecyclerView๋‹ค. Lazy lists๋Š” ๊ฐ€๋กœ๋กœ ์•„์ดํ…œ์ด ์ •๋ ฌ๋˜๋Š” Lazy Row์™€ ์„ธ๋กœ๋กœ ์•„์ดํ…œ์ด ์ •๋ ฌ๋˜๋Š” Lazy Column์ด ์žˆ๋Š”๋ฐ, ์ฃผ๋กœ ํ›„์ž๊ฐ€ ์“ฐ์ธ๋‹ค. ๋ณธ ๊ฒŒ์‹œ๊ธ€์—์„œ Lazy Column์„ ๊ตฌํ˜„ํ•ด๋ณธ๋‹ค. #1-2 ๊ตฌ์กฐLazyColumn { // Add a s..

[Android] Jetpack Compose - Button

#1 ๊ฐœ์š” Jetpack Compose  |  Android Developers์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. Button ๋ฒ„ํŠผ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜๋œ ๋ฒ„ํŠผ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋„๋ก ํ•˜developer.android.comJetpack Compose์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต๋˜๋Š” Composable ์ค‘ ํ•˜๋‚˜์ธ Button์— ๋Œ€ํ•ด ์‚ดํŽด๋ณธ๋‹ค. #2 ์ฝ”๋“œ#2-1 Filled Button@Composablefun FilledButtonExample(textParam: String, modifierParam: Modifier = Modifier) { val context = LocalContext.current ..

[Android] Jetpack Compose - Layout, Arrangement, Alignment

#1 Layout#1-1 ๊ฐœ์š” Compose ๋ ˆ์ด์•„์›ƒ ๊ธฐ๋ณธ์‚ฌํ•ญ  |  Jetpack Compose  |  Android Developers์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Compose ๋ ˆ์ด์•„์›ƒ ๊ธฐ๋ณธ์‚ฌํ•ญ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. Jetpack Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ฑ์˜developer.android.com๊ธฐ๋ณธ XML ๋ฐฉ์‹์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ LinearLayout๊ณผ ๊ฐ™์€ Layout์€ Jetpack Compose์—์„œ๋„ Composable์˜ ํ˜•ํƒœ๋กœ ์กด์žฌํ•œ๋‹ค. ์ด Layout์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณธ๋‹ค. #1-2 ์ข…๋ฅ˜Jetpack Compose์˜ ๊ธฐ๋ณธ Layout์€ Column, Row, Box๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. Column์€ an..

[Android] Jetpack Compose - Modifier

#1 Modifier#1-1 ๊ฐœ์š” Modifier  |  Android Developersandroidx.compose.desktop.ui.tooling.previewdeveloper.android.comJetpack Compose๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ „ํ†ต์ ์ธ ๋ฐฉ์‹์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” XML ์†์„ฑ๊ณผ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ์˜ ๋„ˆ๋น„, ๋†’์ด, ํ‘œ์‹œํ•  ํ…์ŠคํŠธ, ํฌ๊ธฐ, ์Šคํƒ€์ผ ๋ฐ ์ƒ‰์ƒ, ๋ฐฐ๊ฒฝ ์ƒ‰์ƒ ๋ฐ ํŒจ๋”ฉ์„ ์ง€์ •ํ–ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ UI ๊พธ๋ฐˆ ์š”์†Œ๋ฅผ Jetpack Compose์—์„œ๋Š” Modifier๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค. Composable ํ•จ์ˆ˜๋“ค์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ modifier: Modifier = Modifier๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์ด Modifier๋ฅผ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ์ธ์ˆ˜๋กœ์„œ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ UI๋ฅผ ๊พธ๋ฏผ๋‹ค. ..

[Android] Jetpack Compose - Surface

#1 ๊ฐœ์š” androidx.compose.material3  |  Android Developersandroidx.compose.desktop.ui.tooling.previewdeveloper.android.comSurface๋Š” Composable๋“ค์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ, Composable์˜ ์ง‘ํ•ฉ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋„์™€์ค€๋‹ค. #2 ๊ตฌ์กฐ@Composable@ComposableInferredTargetpublic fun Surface( modifier: Modifier, // Surface์— ์ ์šฉ๋  Modifier shape: Shape, // Surface์˜ ๋ชจ์–‘ ์ •์˜ color: Color, // ๋ฐฐ๊ฒฝ์ƒ‰ contentColor: Color, // Surface ์† Composabl..

[Android] Jetpack Compose - ๊ธฐ์ดˆ

#1 Jetpack Compose#1-1 ๊ฐœ์š” Jetpack Compose UI ์•ฑ ๊ฐœ๋ฐœ ๋„๊ตฌ ํ‚คํŠธ - Android ๊ฐœ๋ฐœ์ž  |  Android Developers์•ฑ ์ž‘์„ฑ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” Android์˜ UI ์•ฑ ๊ฐœ๋ฐœ ๋„๊ตฌ ํ‚คํŠธ์™€ ๋ฆฌ์†Œ์Šค์ธ Jetpack Compose๋ฅผ ์‚ดํŽด๋ณด์„ธ์š”.developer.android.com์ „ํ†ต์ ์ธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ์—์„œ UI ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์€ ๋ช…๋ น์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด์—ˆ๋‹ค. XML ๋ ˆ์ด์•„์›ƒ๊ณผ ํ•ด๋‹น ๋ ˆ์ด์•„์›ƒ์„ ์ฐธ์กฐํ•˜๋Š” Java ๋ฐ Kotlin ์ฝ”๋“œ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค. ์ด ๋•Œ, ์ƒˆ๋กญ๊ฒŒ ์ถœ๋ฒ”ํ•œ Jetpack Compose๋Š” ์„ ์–ธ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ, XML ํŒŒ์ผ ์—†์ด ๋ชจ๋“  UI๋ฅผ Kotlin ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•œ๋‹ค (UI์™€ ๋กœ์ง์˜ ํ†ตํ•ฉ).Jetpack Compose๊ฐ€..

[Android] Dagger2 - Hilt๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

#1 Hilt ๊ฐœ์š” Hilt๋ฅผ ์‚ฌ์šฉํ•œ ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž…  |  Android Developers์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Hilt๋ฅผ ์‚ฌ์šฉํ•œ ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž… ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. Hilt๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ข…์†developer.android.comHilt๋Š” Dagger2์˜ ๋ณต์žกํ•œ ๋ถ€๋ถ„์„ ๋” ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ถ”์ƒํ™” ๊ณ„์ธต์ด๋‹ค. ๊ทธ๋Ÿฐ ๋ฉด์—์„œ Dagger2 - Hilt ๊ด€๊ณ„๋Š” SQLite - Room์˜ ๊ด€๊ณ„์™€๋„ ๊ฐ™๋‹ค. Hilt์„ ์‚ฌ์šฉํ•˜๋ฉด Dagger2๋ฅผ ์ƒ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์„ธ์„ธํ•œ ์„ค์ •์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ, ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ์ค„์—ฌ์ค€๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ์ถ”์ƒํ™” ๊ณ„์ธต์ด๋‹ˆ ๋ง์ด๋‹ค. #2 Hil..

[Android] Data Binding - View Binding

#1 View Binding#1-1 ๊ฐœ์š” ๋ทฐ ๊ฒฐํ•ฉ  |  Android Developers์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. ๋ทฐ ๊ฒฐํ•ฉ์€ ๋ทฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ• developer.android.com๋ทฐ ๋ฐ”์ธ๋”ฉ์€ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ, XML์—์„œ @{ ... } ๋ฐ @={ ... }๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์ฆ‰, View Binding์€ findViewById์˜ ์•”์‹œ์  ์„ ์–ธ๋งŒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ด๋‹ค. #1-2 View Binding์˜ ์žฅ์  1. ํ”„๋กœ์ ํŠธ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์งง์Œ 2. xml ์ฝ”๋“œ๋ฅผ ํƒœ๊ทธ๋กœ ๊ฐ์Œ€ ํ•„์š”๊ฐ€ ์—†์Œ (= Bindingํ•  View(XML ์ฝ”..