MVVM 이란?
- 간단하게 말해서 UI를 표기하는 컴포저블이랑, 상태(State)를 관리하는 변수들을 분리하는 것을 말한다.
- 각 컴포저블 함수와 ViewModel는 각각 이벤트(Event)와 상태(State)를 단방향 전달한다.
- 위처럼 따로 분리를 하면 각 컴포저블 함수와 ViewModel의 재사용성이 증가한다.

현재 나에게 익숙한 MVVM 방식은 다음과 같다.
- ViewModel을 상속받은 class 를 만들고, 그 안에 MutableStateFlow 변수를 만든다.
- 여기서 만든 변수는 privite으로 지정하고, _a 식으로 만든다. a식으로 만든 변수를 초기화 하여 getter 처럼 사용한다. setter는 따로 만든다
- private val _uiState = MutableStateFlow(GameUiState())
- val uiState: StateFlow = _uiState.asStateFlow()
- Compose UI 함수의 매개변수에 ViewModel 을 첨가하고,
- val gameUiState by gameViewModel.uiState.collectAsState() 처럼 상태를 불러온다.
- 이벤트를 ViewModel에서 처리하려한다면, Compose 함수의 매개변수에 () -> Unit 함수를 추가하고, 상위에서 람다함수에 ViewModel 내부의 function을 호출하여 이벤트를 처리한다.
참고(주로 5~6 부분)
https://developer.android.com/codelabs/basic-android-kotlin-compose-viewmodel-and-state?hl=ko#0
https://velog.io/@minchae75/Android-Kotlin-Jetpack-Compose-6