๐Ÿ“ฑ์•ˆ๋“œ๋กœ์ด๋“œ XML & Compose

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

์•ž์œผ๋กœ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋ฐฐ์šด ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
์˜ค๋Š˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ธฐ๋ณธ ๊ฐœ๋…, Jetpack Compose, XML ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.


๐Ÿ’ ์•ˆ๋“œ๋กœ์ด๋“œ๋ž€ ?

  • Google์—์„œ ๋งŒ๋“  ๋ชจ๋ฐ”์ผ ์šด์˜์ฒด์ œ(OS)

  • Java, Kotlin์œผ๋กœ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ

  • ์•ฑ ์‹คํ–‰ ํ™˜๊ฒฝ: ์Šค๋งˆํŠธํฐ, ํƒœ๋ธ”๋ฆฟ, TV, ์›จ์–ด๋Ÿฌ๋ธ” ๋“ฑ

  • ๊ตฌ์„ฑ์š”์†Œ : Activity, Fragment, View & ViewGroup, Intent ๋“ฑ

์šฐ์„ ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ๋งŒ ์„ค๋ช…ํ•˜๊ณ  ์ž์„ธํ•œ ๊ฒƒ์€ ์•ž์œผ๋กœ์˜ ์ž์„ธํ•œ ๊ณต๋ถ€๋ฅผ ํ†ตํ•ด ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค (โ—'โ—ก'โ—)



๐Ÿ’ XML

XML์€ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ UI๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, HTML๊ณผ ๋น„์Šทํ•œ ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ํ˜•์‹์œผ๋กœ UI๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , Kotlin(Java) ์ฝ”๋“œ์™€ ๊ฒฐํ•ฉํ•ด ํ™”๋ฉด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • UI๋ฅผ ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ์—์„œ ์ •์˜

  • Kotlin(Java)์—์„œ findViewById๋‚˜ View Binding์œผ๋กœ ์ ‘๊ทผ

  • ๋ทฐ ๊ณ„์ธต์ด ์กด์žฌํ•˜์—ฌ UI๊ฐ€ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ Œ๋”๋ง

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์ฝ”๋“œ์™€ UI๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, XML!"
        android:textSize="20sp"/>
</LinearLayout>
  • ์ฝ”๋“œ์™€ UI๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ๊ด€๋ฆฌํ•ด์•ผ ํ•จ
  • ๋ ˆ์ด์•„์›ƒ์ด ๋ณต์žกํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜ โ†’ ๊ณ„์ธต์ด ๊นŠ์–ด์งˆ์ˆ˜๋ก ๋ Œ๋”๋ง ์†๋„ ๋А๋ ค์ง
  • ๋™์ ์ธ UI ์ž‘์„ฑ์ด ๋ถˆํŽธํ•จ

๐Ÿ’ Jetpack Compose

Jetpack Compose๋Š” Kotlin ๊ธฐ๋ฐ˜์˜ ์ตœ์‹  UI ํˆดํ‚ท์œผ๋กœ, ๊ธฐ์กด XML ๋ฐฉ์‹์ด ์•„๋‹Œ ์„ ์–ธํ˜• UI ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต์‹ UI ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

  • ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ 

    • XML ์—†์ด Kotlin ์ฝ”๋“œ๋งŒ์œผ๋กœ UI ์ž‘์„ฑ ๊ฐ€๋Šฅ

    • @Composable ํ•จ์ˆ˜๋กœ UI๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    • ๋ทฐ ๋ฐ”์ธ๋”ฉ(View Binding) ๋ถˆํ•„์š” โ†’ findViewById() ์•ˆ ์จ๋„ ๋จ

@Composable
fun Greeting() {
    Text(text = "Hello, Compose!")
}

๐Ÿ‘‰ XML๊ณผ View Binding ์—†์ด ํ•œ ์ค„๋กœ UI๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค!


  • ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›€

    • UI์™€ ๋ฐ์ดํ„ฐ ์—ฐ๋™์ด ์ง๊ด€์ 

  • ํผํฌ๋จผ์Šค ์ตœ์ ํ™” (ํšจ์œจ์ ์ธ UI ๋ Œ๋”๋ง)

    • ๋ถˆํ•„์š”ํ•œ ๋ทฐ ๊ณ„์ธต ์ œ๊ฑฐ โ†’ ์„ฑ๋Šฅ ํ–ฅ์ƒ

    • Recomposition ์ตœ์ ํ™” โ†’ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ๋‹ค์‹œ ๊ทธ๋ฆผ

    • XML๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ UI ๋ Œ๋”๋ง ๊ฐ€๋Šฅ


  • ๊ธฐ์กด XML๊ณผ ์™„์ „ํžˆ ๋‹ค๋ฅธ UI ๊ฐœ๋ฐœ ๋ฐฉ์‹์ด๊ธฐ์— ComposeView๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ XML๊ณผ Compose ํ˜ผํ•ฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์™„์ „ํ•œ ์ „ํ™˜์€ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌ



    ๐Ÿšฉ Jetpack Compose๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ์ƒˆ๋กœ์šด UI ๊ฐœ๋ฐœ ๋ฐฉ์‹์œผ๋กœ, ๊ธฐ์กด XML๋ณด๋‹ค ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์ด๋ฉฐ, ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ ์ตœ์‹  ๊ธฐ์ˆ ์ด๊ธฐ์— ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์„ ๊นŠ์ด ๋ฐฐ์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด Jetpack Compose๋Š” ํ•„์ˆ˜!!

    ์•ž์œผ๋กœ Jetpack Compose๋ฅผ ๋” ๊นŠ์ด ๊ณต๋ถ€ํ•˜๊ณ , ์‹ค์ „ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ํ™œ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค (o๏พŸv๏พŸ)ใƒŽ

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