LiveData, MutableLiveData, obeservseAsState() 등을 사용하면서 Compose를 사용하여 구현한 UI에서 여러 상태를 관리할 수 있다. 이를 Composable 관찰자라고 부르며, 어떻게 구현되며 사용되는지 궁금해졋다. 같이 알아봅시다.
@HiltViewModel
class ExampleViewModel @Inject constructor() : ViewModel() {
// MutableLiveData를 사용하여 내부에서 변경 가능한 데이터를 정의합니다.
private val _counter = MutableLiveData<Int>(0)
// 외부에서는 읽기 전용 LiveData로 데이터에 접근하게 됩니다.
val counter: LiveData<Int> get() = _counter
fun increaseCounter() {
_counter.value = (_counter.value ?: 0) + 1
}
}
@Composable
fun CounterScreen(viewModel: ExampleViewModel) {
// observeAsState를 사용하여 LiveData를 Composable UI의 상태로 변환합니다.
val count by viewModel.counter.observeAsState(0)
Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, modifier = Modifier.fillMaxSize()) {
Text(text = "Count: $count", fontSize = 24.sp, fontWeight = FontWeight.Bold)
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = { viewModel.increaseCounter() }) {
Text(text = "Increase Counter")
}
}
}
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private val viewModel: ExampleViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
CounterScreen(viewModel = viewModel)
}
}
}