Android Jetpack Compose 상태관리

Android Jetpack Compose는 UI를 작성하는 데 사용되는 최신 도구이며, 상태 관리는 여기에서 중요한 역할을 합니다. Compose에서는 상태를 관리하기 위해 다양한 기술을 사용할 수 있습니다.

상태란 무엇인가요?

상태는 앱의 데이터를 나타냅니다. 예를 들어, 사용자가 입력한 텍스트, 버튼의 활성화 여부, 앱의 테마 등이 모두 앱의 상태입니다. 상태는 앱의 데이터를 변경하고, UI를 업데이트하는 데 사용됩니다.

상태 관리 방법

상태 저장하기

Composable 함수 내에서 가장 간단한 방법은 mutableStateOf() 함수를 사용하여 상태를 저장하는 것입니다. 이 함수는 상태 값을 저장하는 변수를 만들고, 상태 값을 읽고 쓰는 데 사용할 수 있는 State 객체를 반환합니다.

var count by remember { mutableStateOf(0) }

Button(onClick = { count++ }) {
    Text("Clicks: $count")
}

위의 코드에서 count는 Int 형식의 상태를 저장하고 있으며, remember 함수를 사용하여 Composable 함수가 다시 호출되어도 상태가 유지되도록 합니다.

뷰 모델 사용하기

ViewModel을 사용하여 상태를 저장하고 UI 컴포넌트 간에 상태를 공유할 수 있습니다.

class MyViewModel : ViewModel() {
    private val _count = MutableLiveData(0)
    val count: LiveData<Int> = _count

    fun incrementCount() {
        _count.value = _count.value?.plus(1)
    }
}

@Composable
fun MyScreen(viewModel: MyViewModel = viewModel()) {
    val count by viewModel.count.observeAsState(0)

    Button(onClick = viewModel::incrementCount) {
        Text("Clicks: $count")
    }
}

위의 코드에서는 MyViewModel 클래스를 만들어 count라는 MutableLiveData를 사용하여 상태를 저장하고, incrementCount() 함수를 사용하여 상태를 업데이트합니다.

상태 전달하기

하위 Composable 함수로 상태를 전달할 수 있습니다. 이를 통해 Composable 함수 간에 상태를 공유할 수 있습니다.

@Composable
fun MyComposable(count: Int, onCountChanged: (Int) -> Unit) {
    Button(onClick = { onCountChanged(count + 1) }) {
        Text("Clicks: $count")
    }
}

위의 코드에서는 MyComposable 함수 내에서 count와 onCountChanged 함수를 매개변수로 받고, count 값을 증가시키는 버튼을 만듭니다.

결론

Android Jetpack Compose에서는 상태를 관리하는 다양한 방법을 제공합니다. mutableStateOf() 함수를 사용하여 간단한 상태를 저장할 수도 있고, ViewModel을 사용하여 복잡한 상태를 관리할 수도 있습니다. 또한 하위 Composable 함수로 상태를 전달하여 Composable 함수 간에 상태를 공유할 수도 있습니다.