๐ ๏ธ Jetpack Compose: ์ค์ ํ๋ก์ ํธ์์ ์๊ฐ์ ์ ์ฝํด์ค 5๊ฐ์ง ํ
๐ ๏ธ Jetpack Compose: ์ค์ ํ๋ก์ ํธ์์ ์๊ฐ์ ์ ์ฝํด์ค 5๊ฐ์ง ํ
Jetpack Compose๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ค์ ํ๋ก์ ํธ์์ ์๊ฐ์ ์๋ผ๊ฒ ํด์ค ๋ช ๊ฐ์ง ์ ์ฉํ ํ๋ค์ ์ ๋ฆฌํด๋ดค์ต๋๋ค. UI ํจ์จ์ ๋์ด๊ณ ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์๋ ํ๋ค์ด๋ ์ฐธ๊ณ ํด๋ณด์ธ์.
1. ์คํฌ๋กค ์์น์ ๋ฐ๋ผ TopAppBar ์ ๋ชฉ ๋์ ์ผ๋ก ํ์ํ๊ธฐ
์ฌ์ฉ์๊ฐ ์ฝํ ์ธ ๋ฅผ ์คํฌ๋กคํ ๋ ํน์ ์์น๋ฅผ ์ง๋๋ฉด TopAppBar์ ์ ๋ชฉ์ ํ์ํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. LazyListState์ derivedStateOf๋ฅผ ํ์ฉํ๋ฉด ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
val lazyListState = rememberLazyListState()
val showTitle by remember {
derivedStateOf { lazyListState.firstVisibleItemIndex > 0 }
}
showTitle์ TopAppBar์ ์ ๋ชฉ ํ์ ์ฌ๋ถ์ ํ์ฉํ๋ฉด ๋ฉ๋๋ค.
2. Modifier.composed๋ก ์ปค์คํ Modifier ๋ง๋ค๊ธฐ
๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ Modifier ์กฐํฉ์ด ์๋ค๋ฉด, Modifier.composed๋ฅผ ์ฌ์ฉํด ์ปค์คํ Modifier๋ก ์ ์ํด๋ณด์ธ์. ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋๋ค.
fun Modifier.shimmerEffect(): Modifier = composed {
// shimmer ํจ๊ณผ ๊ตฌํ
}
์ด์ modifier = Modifier.shimmerEffect()์ฒ๋ผ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
3. LaunchedEffect๋ก ์ปดํฌ์ ๋ธ ์๋ช ์ฃผ๊ธฐ ์ฒ๋ฆฌํ๊ธฐ
์ปดํฌ์ ๋ธ์ด ์ฒ์ ๊ตฌ์ฑ๋ ๋ ๋จ ํ ๋ฒ ์คํ๋์ด์ผ ํ๋ ์์ ์ LaunchedEffect๋ฅผ ์ด์ฉํด ์ฒ๋ฆฌํฉ๋๋ค.
LaunchedEffect(Unit) {
// ์ด๊ธฐํ ์์
}
ํน์ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์์ ์ ์ดํ ์ ์์ด ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
4. ์ต์ ์ํ๋ฅผ ์ ์งํ๋ rememberUpdatedState
์ฝ๋ฐฑ ํจ์๋ ์ธ๋ถ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋ recomposition ์์ด ์ต์ ์ํ๋ฅผ ์ ์งํ๋ ค๋ฉด rememberUpdatedState๋ฅผ ์ฌ์ฉํ์ธ์.
val currentOnClick by rememberUpdatedState(newOnClick)
DisposableEffect(Unit) {
// currentOnClick์ ์์ ํ๊ฒ ์ฌ์ฉ
onDispose { }
}
์ด๋ ๊ฒ ํ๋ฉด ์ต์ ์ฝ๋ฐฑ์ด๋ ๊ฐ์ ์์ ํ๊ฒ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
5. ์ํ ๋ณํ๋ฅผ Flow๋ก ์ฒ๋ฆฌํ๋ snapshotFlow
Compose์ ์ํ ๋ณํ๋ฅผ Flow๋ก ์ฒ๋ฆฌํ๊ณ ์ถ๋ค๋ฉด snapshotFlow๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
val scrollState = rememberScrollState()
LaunchedEffect(scrollState) {
snapshotFlow { scrollState.value }
.collect { value ->
// ๋ณํ์ ๋ฐ๋ฅธ ๋ก์ง ์ฒ๋ฆฌ
}
}
๋น๋๊ธฐ ๋ก์ง์ด๋ debounce ์ฒ๋ฆฌ์๋ ์์ฉํ ์ ์์ต๋๋ค.
๐ ๋ง๋ฌด๋ฆฌ
์ด๋ฌํ ํ๋ค์ Jetpack Compose๋ฅผ ์ค์ ํ๋ก์ ํธ์์ ์ข ๋ ๋๋ํ๊ณ ์ ์ฐํ๊ฒ ํ์ฉํ ์ ์๊ฒ ๋์์ค๋๋ค. ๊พธ์คํ ํจํดํํ๊ณ ์ปค์คํ ์ปดํฌ์ ๋ธ์ ์์ฑํด๋๋ฉด ์ฅ๊ธฐ์ ์ผ๋ก ์ ์ง๋ณด์์ ํฐ ๋์์ด ๋ฉ๋๋ค.