๐ก UI ์์ ์ XML๊ณผ Code, Jetpack Compose ์งํํ์ ๋์ ์ฐจ์ด๋ฅผ ๋น๊ตํ๊ณ ํ ์คํธ๋ฅผ ์งํํ์์ต๋๋ค.
๊ฐ์
- XML๊ณผ Programmatically ๋ฐฉ์์ ๋ํ ์ฐจ์ด์ ์ด ๊ถ๊ธํ๋ ์ค ์ง์ ํ ์คํธํ ๋ธ๋ก๊ทธ๋ฅผ ๋ฐ๊ฒฌํ์ฌ ํ์ตํ๊ฒ ๋์์ต๋๋ค.
Performance comparison: building Android Layout with XML vs By Code vs Jetpack Compose
- ์ ํฌ์คํ ์์๋ XML๋ก UI๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฒ๊ณผ Kotlin Code ์์์ UI๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฒ์ ์ฐจ์ด์ ์ ํ์ ํ์์ต๋๋ค.
- ๋ํ Jetpack Compose์ ๋ฑ์ฅ์ผ๋ก 3๊ฐ์ง ๊ฒฝ์ฐ์ ๋ํ ํ ์คํธ๋ฅผ ์งํํ์์ต๋๋ค !
- ์ ํฌ์คํ ์ 2020๋ ๊ฒ์๋ฌผ๋ก, Jetpack Compose๊ฐ ๋ง์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋์์ผ๋ฏ๋ก ํ์ฌ๋ Jetpack Compose์ ํ ์คํธ ์๊ฐ์ด ๋์ฑ ๋จ์ถ๋์์ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
- ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์งํํ์์ต๋๋ค.
๋น๊ต ๋์
XML ๋ ์ด์์
- ์ ํต์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก, UI ์์๋ฅผ XML ํ์ผ์์ ์ ์ธํฉ๋๋ค.
<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:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click Me" />
</LinearLayout>
์ฝ๋๋ก UI ์์ฑ
- ์ฝํ๋ฆฐ ์ฝ๋์์ View ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๊ณ ๋ ์ด์์์ ๊ตฌ์ฑํฉ๋๋ค.
val linearLayout = LinearLayout(this).apply {
orientation = LinearLayout.VERTICAL
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
)
}
val textView = TextView(this).apply {
text = "Hello World!"
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
}
val button = Button(this).apply {
text = "Click Me"
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
}
linearLayout.addView(textView)
linearLayout.addView(button)
setContentView(linearLayout)
Jetpack Compose
- ์ ์ธ์ ๋ฐฉ์์ผ๋ก Composable Function์ผ๋ก UI๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
@Composable
fun Greeting() {
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp)
) {
Text(text = "Hello World!")
Button(onClick = { /* Do something */ }) {
Text("Click Me")
}
}
}
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Greeting()
}
}
}
ํ ์คํธ ์๋๋ฆฌ์ค
- ์ด 2๊ฐ์ง ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ์์ฑํ์์ต๋๋ค.
์ฑ์ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ
- ๊ฐ ์ฑ์ ์คํํ๊ณ ์ฒซ ํ๋ฉด์ด ๋ก๋๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํฉ๋๋ค.
๋ ์ด์์ ๋ ๋๋ง ์๊ฐ
- UI๋ฅผ ๋ ๋๋ง ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํฉ๋๋ค.
ํ ์คํธ ํ๊ฒฝ
- Android Studio์์ ๋์ผํ ๊ธฐ๊ธฐ๋ก ํ ์คํธ๋ฅผ ์งํํ์์ต๋๋ค.
- Compose ๋ฒ์ ์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์์ต๋๋ค.
- Wi-Fi๋ฅผ ์ฌ์ฉํ๋ฉด CPU๊ฐ ๋๋ ค์ง๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋ก ๋ชจ๋ Wi-Fi์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋น์ค๋ฅผ ๋๊ณ ํ ์คํธ๋ฅผ ์งํํ์ต๋๋ค.
- ๋ฐ๋ณต ํ ์คํธ๋ฅผ ํตํด ๊ฐ ๋ฐฉ์๋ณ๋ก ์ฌ๋ฌ ๋ณ ๋ฐ๋ณตํด์ ํ๊ท ๊ฐ์ ๋์ถํ์์ต๋๋ค.
- Logcat์ ์ฌ์ฉํ์ฌ ๊ฐ ์ฑ์ ์์๊ณผ onResume()์์ ์๊ฐ์ ์ธก์ ํฉ๋๋ค.
override fun onResume() {
super.onResume()
val end = System.currentTimeMillis()
val result = end - start
}
ํ ์คํธ ๊ฒฐ๊ณผ
- ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ฆฌ์ด(ms) ๋จ์๋ก ์ธก์ ํ์ฌ ์ ๋ฆฌํ์์ต๋๋ค.
๋ฐฉ๋ฒ | ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ(ms) | ๋ ์ด์์ ๋ ๋๋ง ์๊ฐ(ms) |
XML ๋ ์์ด์ | ํ๊ท ์ฝ 250ms | ํ๊ท ์ฝ 300ms |
์ฝ๋ ์์ฑ | ํ๊ท ์ฝ 220ms | ํ๊ท ์ฝ 280ms |
Jetpack Compose | ํ๊ท ์ฝ 300ms | ํ๊ท ์ฝ 350ms |
์ด๊ธฐ ๋ก๋ฉ ์๊ฐ
- ์ฝ๋๋ก UI๋ฅผ ์์ฑํ ๋ฐฉ์์ด ๊ฐ์ฅ ๋น ๋ฅธ ๋ก๋ฉ ์๊ฐ์ ๋ณด์์ต๋๋ค.
- XML ๋ ์ด์์์ด ๊ทธ ๋ค๋ฅผ ๋ฐ๋ฅด๊ณ , Jetpack Compose๊ฐ ๊ฐ์ฅ ๋๋ ธ์ต๋๋ค.
- Jetpack Compose์ ๊ฒฝ์ฐ ์ ์ธ์ ๋ฐฉ์๊ณผ ๋ง์ ๋ฆฌ์์ค๋ฅผ ์๊ตฌํ๋ ์ด๊ธฐ ์ค์ ์ผ๋ก ์ธํด ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์์ต๋๋ค.
๋ ์ด์์ ๋ ๋๋ง ์๊ฐ
- ์ฝ๋๋ฅผ UI๋ก ์์ฑํ ๋ฐฉ์์ด ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ ๋๋ง ๋์์ผ๋ฉฐ, XML๋ณด๋ค ์กฐ๊ธ ๋ ๋น ๋ฅธ ๋ ๋๋ง์ ๋ณด์ฌ์คฌ์ต๋๋ค.
- Jetpack Compose๋ ํ์ฌ ๋ ๋๋ง ์๊ฐ์ด ๊ฐ์ฅ ๊ธธ์์ง๋ง ์ต์ ๋ฒ์ ์์๋ ๋ง์ ์ต์ ํ๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ฒ์ผ๋ก ๋ณด์ ํน์ ์ํฉ์์๋ ๋น ๋ฅธ ๋ ๋๋ง์ ๋ณด์ธ ๊ฒฝ์ฐ๋ ์์์ต๋๋ค.
๊ฒฐ๋ก
- Jetpack Compose๋ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ๊ณผ ๋ ๋๋ง ์๊ฐ์ด ๊ธธ์ง๋ง ์ ์ธ์ UI ์์ฑ์ ์ฅ์ ๊ณผ ๋ณต์กํ UI๋ฅผ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์๋ ์ฅ์ ์ด ์์ต๋๋ค.
- ๋ํ ์ต์ ๋ฒ์ ์ผ ์๋ก ์ต์ ํ๊ฐ ์ด๋ฃจ์ด์ง๋ฏ๋ก ์ ์ ์ฅ์ ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค.
- ์ฝ๋ ์์ฑ ๋ฐฉ์์ด XML ๋ ์ด์์ ๋ณด๋ค ๋น ๋ฅธ ๋ก๋ฉ๊ณผ ๋ ๋๋ง ์๊ฐ์ ๋ณด์ฌ์ฃผ์์ง๋ง ๊ทธ ์ฐจ์ด๋ ์์ผ๋ฉฐ, ์ฝ๋ ์์ฑ ๋ฐฉ์์ด ๋ ๋ณต์กํ ๊ฒ์ ๊ณ ๋ คํ๋ฉด XML ๋ ์ด์์ ๋ฐฉ์์ด ๋ ์ข์ ๋ฐฉ๋ฒ์ด ๋ ์๋ ์์ต๋๋ค.
- ํ๋ก์ ํธ์ ํ์์ ๋ฐ๋ผ ์ต์ ์ ์ ํ์ ์งํํ๋ ๊ฒ์ด ์ค์ํ ๊ฒ์ ๋๋ค !!