

@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 ๊ฐ์ด ์ฆ๊ฐํ๊ฒ ๋๋ฉด ์ด๊ฑธ ๋ณด๊ณ ์๋ ์ปดํฌ์ ๋ธ์ ๋ฆฌ์ปดํฌ์ง์
๋๋ค.
๋ฆฌ์ปดํฌ์ง์ ์ 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 |