@Immutable
data class LoginState(
val id: String = "",
val password: String = "",
)
์ปดํฌ์ฆ๋ก ๊ฐ๋ฐ ์ค์ธ๋ฐ, ์ด์ UiState์ ํด๋นํ๋ ๊ฐ๋ ์ผ๋ก ์ฐ๋ data class์ `@Immutable` ์ด๋ ธํ ์ด์ ์ ๋ถ์ฌ์ค์ผํ๋ค๋ ๊ฑธ ์์๋ค. ์ ๊ทธ๋ ๊ฒ ํด์ผ๋ ๊น?
`@Immutable`์ ๊ฐ์ฒด๊ฐ ๋ถ๋ณ(Immutable)์์ ๋ช ์ํ์ฌ, ๋ด๋ถ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ผ์ด ์๋ค๊ณ Compose์๊ฒ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค. ํ์ง๋ง, @Immutable์ด ๋ถ์ด ์๋ค๊ณ ํด์ ๋ฆฌ์ปดํฌ์ง์ ์ "์ ๋ ์ ํ๋ ๊ฒ"์ด ์๋๋ผ, ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒฝ์ฐ์๋ ๋ถํ์ํ ๋ฆฌ์ปดํฌ์ง์ ์ ๋ฐฉ์งํ ์ ์๋ค.
`@Stable`์ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์์ง๋ง, Compose๊ฐ ๋ด๋ถ ํ๋ ๋ณํ๊น์ง ์ถ์ ๊ฐ๋ฅํ๋ค๊ณ ํ๋จํ ๋ ์ฌ์ฉํ๋ค.
์ฆ, @Stable์ด ๋ถ์ด ์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋ฐ๋๋ฉด ๋ฆฌ์ปดํฌ์ง์
์ด ๋ฐ์ํ์ง๋ง, ๊ฐ์ฒด๊ฐ ๊ฐ๋ค๋ฉด ๋ถํ์ํ ๋ฆฌ์ปดํฌ์ง์
์ ๋ฐฉ์งํ ์ ์๋ค.
์ข ๋ ์์ธํ ๋ณด๊ฒ ๋ค.
@Composable
fun UserProfile(user: User) {
/* body */
}
์ปดํฌ์ ๋ธํจ์์ ๋ํด์, ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ฆฌ์ปดํฌ์ง์ ์ ์ํํ๋๋ฐ, ์ด ์์ ์ฝ๋์์๋ user์ ํ๋กํผํฐ ๊ฐ์ด ๋ฐ๋์ง์๋ ํ UserProfile์ด ๋ฆฌ์ปดํฌ์ง์ ๋์ง์๋๋ค.(๋ณด๊ณ ์๋ ์ํ๊ฐ user ํ๋๋ผ๊ณ ํ์ ๋)
@Composable
fun Counter() {
var count by remember { mutableStateOf(0) }
Button(onClick = { count++ }) {
Text("Count: $count")
}
}
์ปดํฌ์ฆ์์ UI๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ํ๋ผ๊ณ ๋ณดํต ์๊ธฐํ๋๋ฐ, `by remember { mutableStateOf(T) }`๋ก ์ ์ธํด์ ์ผ์ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ var ๊ฐ์ฒด๋ก ์ ์ธ๋ ๊ฑด ์ํ๊ฐ ๋ณํ ์ ์๊ณ , ๋ง์ฝ ์ด๊ฒ count๋ผ๊ณ ํ์ ๋ count ๊ฐ์ด ์ฆ๊ฐํ๊ฒ ๋๋ฉด ์ด๊ฑธ ๋ณด๊ณ ์๋ ์ปดํฌ์ ๋ธ์ ๋ฆฌ์ปดํฌ์ง์ ๋๋ค.
stateDiagram-v2
[*] --> ์ํ๋ณํ: ์ํ_๋ณ๊ฒฝ_๊ฐ์ง
์ํ๋ณํ --> ๋ฆฌ์ปดํฌ์ง์
_ํ์_์ฌ๋ถ_ํ๋จ
๋ฆฌ์ปดํฌ์ง์
_ํ์_์ฌ๋ถ_ํ๋จ --> ๋ฆฌ์ปดํฌ์ง์
์ด_ํ์ํ๋ฉด: Yes
๋ฆฌ์ปดํฌ์ง์
_ํ์_์ฌ๋ถ_ํ๋จ --> ๋ฆฌ์ปดํฌ์ง์
์ด_ํ์์์: No
๋ฆฌ์ปดํฌ์ง์
์ด_ํ์ํ๋ฉด --> ์ฌ๊ตฌ์ฑ๋_Composable๋ค: ์ปดํ์ผ๋ฌ๊ฐ_์ ํ์ ์ผ๋ก_์ฌ๊ตฌ์ฑ
๋ฆฌ์ปดํฌ์ง์
์ด_ํ์์์ --> [*]
์ฌ๊ตฌ์ฑ๋_Composable๋ค --> UI_๋ค์_๊ทธ๋ฆผ: ๋ค์_๋ ๋๋งํ๋ค
UI_๋ค์_๊ทธ๋ฆผ --> [*]
๋ฆฌ์ปดํฌ์ง์ ์ UI ํธ๋ฆฌ๋ฅผ ์ํํ๋ฉด์ ๋ณ๊ฒฝ๋ ์ํ์ ๋ํด์ UI๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ต์ ํ์๋ ๋ฐ์ ํ ์ฐ๊ด์ด ์๋ค. ์ฆ ์๋์ฒ๋ผ ์ ๋ฆฌํ ์ ์๊ฒ ๋ค.
- ์ํ ๋ณํ๋ UI ์ ๋ฐ์ดํธ๊ฐ ํ์ํ๋ค๋ ์ ํธ๋ฅผ ๋ณด๋ด๋ฉฐ, Compose์์ ์๋ ๊ฐ์ง
- ๋ฆฌ์ปดํฌ์ง์ ์ ์ค์ ๋ก ์ํ๊ฐ ๋ณ๊ฒฝ๋ Composable์ ์ฌํธ์ถํ์ฌ UI๋ฅผ ๊ฐฑ์
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์!
'Android ๐ฅ๏ธ > Compose๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SideEffect, LaunchedEffect, DisposableEffect ๋์์๋ฆฌ (1) | 2024.12.14 |
---|---|
Composition & Recomposition ๋์ ์๋ฆฌ (1) | 2024.12.14 |
Jetpack Compose ๊ธฐ์ด (0) | 2024.08.16 |