Jetpack Compose์ recomposition(์ฌ๊ตฌ์ฑ)์ Compose์์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋
์ค ํ๋์
๋๋ค.
UI๋ฅผ ์์ฃผ ๋๋ํ๊ฒ ๋ค์ ๊ทธ๋ ค์ฃผ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ์ข๊ณ , ์ ์ธํ UI๋ฅผ ๊ตฌํํ ์ ์๋ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
@Composable
ํจ์๋ UI๋ฅผ ๊ทธ๋ฆฌ๋ ํจ์์
๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฑ์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด, ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ด๋ด ๋ UI๋ ๊ฐ์ด ๋ฐ๋์ด์ผ ์์ฐ์ค๋ฝ๊ฒ ์ฃ ?
Compose์์๋ ๊ฐ์ด ๋ฐ๋๋ฉด ํด๋น ์ปดํฌ์ ๋ธ ํจ์๋ฅผ ๋ค์ ์คํํด์ UI๋ฅผ ์๋์ผ๋ก ์
๋ฐ์ดํธํฉ๋๋ค.
์ด ๊ณผ์ ์ ๋ฐ๋ก Recomposition์ด๋ผ๊ณ ํฉ๋๋ค.
์ฆ,
โ์ ๋ ฅ๊ฐ(State ๋ฑ)์ด ๋ฐ๋๋ฉด ํด๋น UI๋ฅผ ์๋์ผ๋ก ๋ค์ ๊ทธ๋ ค์ค๋คโ
Recomposition์ ์ปดํฌ์ ๋ธ ํจ์์ ์ ๋ฌ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋ ์๋์ผ๋ก ๋ฐ์ํฉ๋๋ค.
์ฃผ๋ก ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์ ์ผ์ด๋ฉ๋๋ค.
remember
, mutableStateOf
๋ก ์ ์ธํ ๊ฐ์ด ๋ฐ๋์์ ๋StateFlow
, LiveData
๋ฅผ .collectAsState()
๋ก ๊ตฌ๋
์ค์ผ ๋derivedStateOf
, snapshotFlow
๋ฑ์ ์ฌ์ฉํ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋@Composable
fun Counter() {
var count by remember { mutableStateOf(0) }
Column {
Text("Count: $count") // ์ด ๋ถ๋ถ์ด recomposition ๋์
Button(onClick = { count++ }) {
Text("Click me")
}
}
}
count++
๋ก ๊ฐ์ด ์ฆ๊ฐํ๋ฉด์, mutableStateOf
๊ฐ Compose์๊ฒ โ๊ฐ์ด ๋ฐ๋์์ด!โ๋ผ๊ณ ์๋ ค์ค๋๋ค.Text("Count: $count")
๋ฅผ ๋ค์ ์คํํด์ ๋ณ๊ฒฝ๋ ๊ฐ์ ๋ฐ์ํ UI๋ฅผ ๊ทธ๋ ค์ค๋๋ค.mutableStateOf(...)
๊ฐ์ ์ํ ๊ฐ์ ๋ด๋ถ์ ์ผ๋ก Compose์๊ฒ ๋ณ๊ฒฝ์ ๊ฐ์ง์ํต๋๋ค.์ฉ์ด | ์ค๋ช |
---|---|
Composition | ์ปดํฌ์ ๋ธ์ด ์ฒ์ ์คํ๋์ด UI๋ฅผ ๊ทธ๋ฆฌ๋ ๊ณผ์ |
Recomposition | ๊ฐ์ด ๋ฐ๋์ด ํด๋น ์ปดํฌ์ ๋ธ์ ๋ค์ ์คํํ๋ ๊ณผ์ |
remember | recomposition ์ ๊ฐ์ ๊ธฐ์ตํ๋๋ก ํด์ฃผ๋ ํค์๋ |
derivedStateOf | ๋ค๋ฅธ ์ํ์ ์์กดํ ๊ฐ์ ์ถ์ ํ ๋ ์ฌ์ฉ |
key | ๋ฆฌ์คํธ๋ ๋ฐ๋ณต๋ UI์์ recomposition ๋ฒ์๋ฅผ ์ ์ดํ ์ ์๋ ๊ธฐ์ค ๊ฐ |
๋ถํ์ํ ์ฌ๊ตฌ์ฑ์ ์ค์ด๋ฉด ์ฑ์ด ํจ์ฌ ๋ ๋ถ๋๋ฝ๊ณ ํจ์จ์ ์ผ๋ก ๋์ํฉ๋๋ค.
Tips !
remember
๋ฅผ ์ ๊ทน ํ์ฉํด ๊ณ์ฐ ๋น์ฉ์ด ํฐ ์์
์ ์บ์ํ๋ค.LaunchedEffect
, SideEffect
๋ฑ ์ฌ์ด๋ ์ดํํธ ๊ด๋ จ ๋๊ตฌ๋ฅผ ์ ์ ํ ์ฌ์ฉํ๋ค.@Composable
fun Parent() {
var count by remember { mutableStateOf(0) }
Column {
Button(onClick = { count++ }) {
Text("Increase")
}
Child() // ์ด ํจ์๋ count์ ๋ฌด๊ดํ๊ธฐ ๋๋ฌธ์ ๋ค์ ์คํ๋์ง ์์
Text("Count: $count") // ์ด ๋ถ๋ถ๋ง ๋ค์ ๊ทธ๋ ค์ง
}
}
@Composable
fun Child() {
Log.d("Recomp", "Child recomposed!") // ๋ก๊ทธ ์ ์ฐํ
}
count
๊ฐ์ด ๋ฐ๋์ด๋ Child()
๋ ์ํฅ์ ๋ฐ์ง ์๊ธฐ ๋๋ฌธ์, ๋ถํ์ํ recomposition์ ํผํ ์ ์์ต๋๋ค.Jetpack Compose์ Recomposition์ ์ ์ธํ UI์ ํต์ฌ์ด๋ฉฐ,
ํจ์จ์ ์ด๊ณ ์ง๊ด์ ์ธ UI ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ค๋๋ค.
โ์
๋ ฅ๊ฐ์ด ๋ฐ๋๋ฉด ๊ด๋ จ๋ ๋ถ๋ถ๋ง ๋ค์ ๊ทธ๋ฆฐ๋ค.โ
์ด ๋จ์ํ ์์น์ด Compose์ ๋ชจ๋ ๋์์ ์ด๋๊ณ ์์ต๋๋ค.
์ด๋ฅผ ์ดํดํ๊ณ ์ ํ์ฉํ๋ฉด, ์ฑ๋ฅ๋ ์ก๊ณ ์ ์ง๋ณด์๋ ์ฌ์ด UI ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค ๐