Jetpack Compose๋ฅผ ์ฌ์ฉํ๋ค ๋ณด๋ฉด "์ด๋ค ์ปดํฌ์ ๋ธ์ด ์ธ์ ๋ค์ ์คํ๋๋ ๊ฑธ๊น?"๋ผ๋ ๊ถ๊ธ์ฆ์ด ๋ค ๋๊ฐ ์์ต๋๋ค.
์ด ๊ธ์์๋ Compose ๋ด๋ถ์ ์๋ ๋ฐฉ์, ํนํ ์ปดํ์ผ๋ฌ์ ๋ฐํ์์ ์ญํ , ๊ทธ๋ฆฌ๊ณ Composition Phase๊ฐ ์ด๋ค ์์ผ๋ก UI ์ฌ๊ตฌ์ฑ์ ๊ด์ฌํ๋์ง๋ฅผ ์ ๋ฆฌํด๋ณด๋ ค ํฉ๋๋ค.
์ ํํ ๋งํ๋ฉด, Composable ํจ์๊ฐ ๋ค์ ์คํ๋ ์ง ๋ง์ง๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋ Compose Runtime์ด ๊ฒฐ์ ํฉ๋๋ค.
์ปดํ์ผ๋ฌ๋ @Composable
ํจ์์ ํน๋ณํ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ณ ,
์ค์ ์คํ ์์ ๊ณผ ์ฌ๊ตฌ์ฑ(recomposition)์ Runtime์ด composition ๊ณผ์ ์์ ์ํ ์ถ์ ์ ํตํด ๊ด๋ฆฌํฉ๋๋ค.
Jetpack Compose๋ Kotlin Compiler Plugin์ผ๋ก ์๋ํฉ๋๋ค.
์ฆ, @Composable
์ด ๋ถ์ ํจ์๋ ์ปดํ์ผ ์์ ์ ๋ค์๊ณผ ๊ฐ์ ํธ๋์คํผ(transform) ์์
์ ๊ฑฐ์นฉ๋๋ค.
์๋ฅผ ๋ค์ด ์๋ ์ฝ๋๊ฐ ์๋ค๋ฉด:
@Composable
fun MyComposable() {
val count by remember { mutableStateOf(0) }
Text("Count: $count")
}
์ปดํ์ผ๋ฌ๋ ์ด๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๋ค์๊ณผ ๋น์ทํ ํํ๋ก ๋ณํํฉ๋๋ค:
fun MyComposable($composer: Composer, $changed: Int) {
val countState = remember($composer, ...)
val count = countState.value
Text($composer, "Count: $count")
}
countState.value
๊ฐ ์ฝํ๋ ์๊ฐ, Compose Runtime์
"์ด ์ปดํฌ์ ๋ธ์ count์ ์์กดํ๋ค"๋ ์ฌ์ค์ ๊ธฐ๋กํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ค์ count.value
๊ฐ ๋ณ๊ฒฝ๋๋ฉด,
์ด ๊ฐ์ ์ฝ์๋ ์ปดํฌ์ ๋ธ๋ง ๋ค์ ์คํ๋ฉ๋๋ค.
์ฃผ์ฒด | ์ญํ |
---|---|
Compose ์ปดํ์ผ๋ฌ | @Composable ํจ์์ ์ํ ์ถ์ ๋ฐ recomposition ํธ๋ํน์ฉ ์ฝ๋ ์ฝ์
|
Compose Runtime | State ๊ฐ ์ฝํ๋ ์์ ์ ๊ฐ์งํ๊ณ , ๊ทธ ๊ฐ์ ์ฐธ์กฐํ ์ปดํฌ์ ๋ธ๋ง ์ถํ ๋ค์ ์คํ |
Composition Phase๋ Composable ํจ์๊ฐ ์ค์ ๋ก ์คํ๋๋ ์์ ์ด์,
UI ๊ตฌ์กฐ์ ์ํ ์์กด์ฑ์ ์ ์ํ๋ "๋น๋ ๋จ๊ณ"์ ๋๋ค.
Compose๋ ํ๋์ UI ํ๋ ์์ด ๊ทธ๋ ค์ง๊ธฐ๊น์ง ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค.
@Composable
ํจ์๋ค์ด ์คํ๋ฉ๋๋ค.State
๋ฅผ ์ฝ์๋์ง ์ถ์ ํฉ๋๋ค.ํญ๋ชฉ | ์ค๋ช |
---|---|
Composable ํจ์ ์คํ | ์ด๋ค UI๋ฅผ ๋ง๋ค์ง ๊ฒฐ์ |
State ์์กด์ฑ ์ถ์ | ์ด๋ค ์ํ(State)๋ฅผ ์ฝ๋์ง ์ถ์ |
Recomposition ์กฐ๊ฑด ๊ธฐ๋ก | ์ํ๊ฐ ๋ฐ๋๋ฉด ์ด๋ค ์ปดํฌ์ ๋ธ์ ๋ค์ ์คํํ ์ง ๊ธฐ์ต |
State
๊ฐ์ด ๋ฐ๋๋ฉด, ๊ทธ ๊ฐ์ ์ฝ์๋ ์ปดํฌ์ ๋ธ๋ง ๋ค์ ์คํ๋ฉ๋๋ค.
์ด ๋ ๋ค์ ์คํ๋๋ ๊ณผ์ ์ "Recomposition"์ด๋ผ๊ณ ํ๋ฉฐ,
๋ด๋ถ์ ์ผ๋ก๋ ๋ค์ Composition Phase๋ฅผ ๊ฑฐ์น๊ฒ ๋ฉ๋๋ค.
์กฐ๊ธ ๋ ์ฝ๊ฒ ๋น์ ํด๋ณด๋ฉด,
Jetpack Compose์ ํต์ฌ์ ์ํ ๊ธฐ๋ฐ UI์
๋๋ค.
ํ์ง๋ง ์ด ์ํ ์ถ์ ์ด ๋จ์ํ if-else ๋ก์ง์ด ์๋๋ผ,
์ปดํ์ผ๋ฌ์ ๋ฐํ์์ด ํ๋ ฅํ์ฌ UI์ ํจ์จ์ ์ธ ์
๋ฐ์ดํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ค๋ค๋ ์ ์ด ๋งค์ฐ ์ธ์์ ์
๋๋ค.
์ด ํ๋ฆ์ ์ดํดํ๊ณ ๋๋ฉด, ๋ถํ์ํ recomposition์ ํผํ๊ณ ๋ ์ต์ ํ๋ Compose UI๋ฅผ ์ค๊ณํ ์ ์๊ฒ ๋ ๊ฒ๋๋ค!