๐Ÿ“ฑJetpack Compose

HBยท2025๋…„ 4์›” 15์ผ

๐Ÿ’ Jetpack Compose ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ


์ปดํฌ์ €๋ธ” ๊ณ„์ธต๊ตฌ์กฐ

  • ๊ณ„์ธต๊ตฌ์กฐ?.
    • Compose๋Š” ์œ„์—์„œ ์•„๋ž˜๋กœ ์Œ“๋Š” ํ•จ์ˆ˜ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ
    • Column, Row, Box ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ์— Text, Image, Button ๊ฐ™์€ ์ปดํฌ์ €๋ธ” ๋ฐฐ์น˜
Column {
    Text("Hello")
    Row {
        Text("Compose")
        Text("World")
    }
}

=> Column ์•ˆ์— Text์™€ Row๊ฐ€ ์žˆ๊ณ , Row ์•ˆ์—๋Š” ๋˜ Text ๋‘ ๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ตฌ์กฐ


DemoText ์ปดํฌ์ €๋ธ” ๋ฏธ๋ฆฌ๋ณด๊ธฐ

  • Text๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ปดํฌ์ €๋ธ” ํ•จ์ˆ˜
@Composable
fun DemoText() {
    Text(text = "์•ˆ๋…•ํ•˜์„ธ์š”")
}
  • UI์—์„œ ํ…์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ

  • text ํŒŒ๋ผ๋ฏธํ„ฐ ์™ธ์—๋„ style, color, fontSize ๋“ฑ์„ ์„ค์ • ๊ฐ€๋Šฅ

DemoText ๋ฏธ๋ฆฌ๋ณด๊ธฐ

  • @Preview๋ฅผ ์‚ฌ์šฉ
@Preview(showBackground = true)
@Composable
fun DemoTextPreview() {
    DemoText()
}

-> showBackground = true ์˜ต์…˜์„ ์ฃผ๋ฉด, ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐฐ๊ฒฝ์ด ํฐ์ƒ‰์œผ๋กœ ๋‚˜์™€์„œ ๋ณด๊ธฐ ์ข‹๋‹ค!

DemoSlider ์ปดํฌ์ €๋ธ” ์ถ”๊ฐ€ํ•˜๊ธฐ

  • ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” UI ์š”์†Œ
@Composable
fun DemoSlider() {
    var sliderPosition by remember { mutableStateOf(0f) }

    Column {
        Text("Value: ${sliderPosition}")
        Slider(
            value = sliderPosition,
            onValueChange = { sliderPosition = it },
            valueRange = 0f..100f
        )
    }
}
  • remember์™€ mutableStateOf๋ฅผ ์‚ฌ์šฉํ•ด ์Šฌ๋ผ์ด๋”์˜ ๊ฐ’์„ ์ƒํƒœ๋กœ ์ €์žฅํ•˜๊ณ , ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค UI๋ฅผ ๊ฐฑ์‹ 

DemoScreen ์ปดํฌ์ €๋ธ” ์ถ”๊ฐ€ํ•˜๊ธฐ

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํฌ์ €๋ธ”์„ ๋ชจ์•„ ํ•˜๋‚˜์˜ ํ™”๋ฉด์„ ๊ตฌ์„ฑ
@Composable
fun DemoScreen() {
    Column(modifier = Modifier.padding(16.dp)) {
        DemoText()
        Spacer(modifier = Modifier.height(16.dp))
        DemoSlider()
    }
}
  • Spacer๋Š” ์š”์†Œ ๊ฐ„ ๊ฐ„๊ฒฉ์„ ์ค„ ๋•Œ ์‚ฌ์šฉ

  • Modifier.padding์œผ๋กœ ์ „์ฒด ์—ฌ๋ฐฑ๋„ ์„ค์ • ๊ฐ€๋Šฅ

DemoScreen ์ปดํฌ์ €๋ธ” ๋ฏธ๋ฆฌ๋ณด๊ธฐ

@Preview(showSystemUi = true)
@Composable
fun DemoScreenPreview() {
    DemoScreen()
}
  • showSystemUi = true๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ƒํƒœ๋ฐ”๋‚˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” ๋“ฑ ์‹œ์Šคํ…œ UI๋„ ํ•จ๊ป˜ ๋ณด์—ฌ์ค˜์„œ ์‹ค์ œ ํ™”๋ฉด ๋А๋‚Œ


๐Ÿ’ Android Studio ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•


AVD

  • AVD๋Š” ๊ฐ€์ƒ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ธฐ๊ธฐ๋กœ ์‹ค์ œ ์Šค๋งˆํŠธํฐ ์—†์ด ์•ฑ ์‹คํ–‰ ๊ฐ€๋Šฅ

  • ์œ„์น˜: Tools > Device Manager

  • ๋””๋ฐ”์ด์Šค ์ด๋ฆ„, Android ๋ฒ„์ „, ํ™”๋ฉด ํฌ๊ธฐ ๋“ฑ์„ ์„ค์ •ํ•ด ๊ฐ€์ƒ ๋””๋ฐ”์ด์Šค ์ƒ์„ฑ


Android Emulator

  • AVD๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œจ๋Š” ์ฐฝ์ด ์—๋ฎฌ๋ ˆ์ดํ„ฐ

  • ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ๋Š” ์‹ค์ œ ์•ฑ์ฒ˜๋Ÿผ ์กฐ์ž‘ ๊ฐ€๋Šฅ (ํด๋ฆญ, ์ œ์Šค์ฒ˜, ํšŒ์ „, GPS ๋“ฑ)

  • ์˜ค๋ฅธ์ชฝ ๋ฐ”์—์„œ ๋‹ค์–‘ํ•œ ์„ค์ • ๊ฐ€๋Šฅ (์นด๋ฉ”๋ผ, ๋ฐฐํ„ฐ๋ฆฌ, ์„ผ์„œ ๋“ฑ)

Android Studio ์ธํ„ฐํŽ˜์ด์Šค

  • ๊ธฐ๋ณธ ํ™”๋ฉด ๊ตฌ์„ฑ

    • Project ํŒจ๋„: ์ „์ฒด ํด๋” ๊ตฌ์กฐ

    • Editor: ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณต๊ฐ„

    • Preview: Compose UI ๋ฏธ๋ฆฌ๋ณด๊ธฐ

    • Logcat: ์•ฑ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ๋กœ๊ทธ ์ถœ๋ ฅ


ํ‚ค๋ณด๋“œ ๋‹จ์ถ•ํ‚ค

  • ์ž๋™ ์™„์„ฑ : Ctrl + Space
  • ์ฝ”๋“œ ํฌ๋งทํŒ… : Ctrl + Alt + L
  • ๋น ๋ฅธ ์‹คํ–‰ : Shift + F10
  • ๋ฆฌํŒฉํ† ๋ง ๋ฉ”๋‰ด : Ctrl + Alt + Shift + T
  • ์‹ฌ๋ณผ ๊ฒ€์ƒ‰ : Ctrl + O
  • ์ „์ฒด ๊ฒ€์ƒ‰ : Ctrl + Shift + F


๐Ÿ’ Android ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”


MVVM ํŒจํ„ด

  • Model - View - ViewModel ๊ตฌ์กฐ

  • UI์™€ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์„œ ์œ ์ง€๋ณด์ˆ˜์™€ ํ…Œ์ŠคํŠธ๊ฐ€ ์‰ฌ์›Œ์ง

  • View: ํ™”๋ฉด (Activity, Compose UI)

  • ViewModel: ์ƒํƒœ์™€ UI ๋กœ์ง

  • Model: ๋ฐ์ดํ„ฐ, API, DB

Jetpack ์•„ํ‚คํ…์ฒ˜ ์ปดํฌ๋„ŒํŠธ

  • LiveData: ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ

  • ViewModel: ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ณ ๋ คํ•œ ์ƒํƒœ ์ €์žฅ

  • Navigation: ํ™”๋ฉด ๊ฐ„ ์ด๋™ ์ฒ˜๋ฆฌ

  • Room: SQLite ๊ธฐ๋ฐ˜ ๋กœ์ปฌ DB

0๊ฐœ์˜ ๋Œ“๊ธ€