카테고리 없음

StateIn

whjungdev 2024. 10. 16. 15:00
 

stateIn은 주로 Kotlin의 Flow와 관련된 개념으로, 상태를 관리하는 데 유용한 함수입니다. 이 함수는 Flow의 값을 상태로 변환하여, 상태의 변경을 관찰하고 그에 따라 UI를 업데이트할 수 있도록 돕습니다. 아래에 stateIn의 주요 특징과 사용 방법을 설명할게요.

주요 특징

  1. 상태 관리: stateIn을 사용하면 Flow의 값을 상태로 변환하여, 여러 컴포넌트에서 이 상태를 공유할 수 있습니다.
  2. 단일 출처의 진리(Single Source of Truth): 애플리케이션에서 한 곳에서 상태를 관리하고, 이를 다른 곳에서 사용할 수 있게 합니다.
  3. Lifecycle-aware: stateIn은 Lifecycle을 인식하여, Activity나 Fragment가 활성화된 상태에서만 값을 수집합니다.
  4. 재사용성: 여러 컴포넌트가 동일한 상태를 사용할 수 있도록 하여 코드의 중복을 줄입니다.

사용 방법

stateIn을 사용하기 위해서는 Flow를 생성하고, 이를 stateIn으로 변환하면 됩니다. 예를 들어:

val flow: Flow<Int> = flowOf(1, 2, 3).asFlow()
val stateFlow: StateFlow<Int> = flow.stateIn(
    scope = viewModelScope,  // CoroutineScope
    started = SharingStarted.Lazily, // Flow가 처음으로 수집될 때 시작
    initialValue = 0 // 초기 값 설정
)

매개변수 설명

  • scope: StateFlow를 수집할 CoroutineScope입니다. 보통 ViewModel의 viewModelScope를 사용합니다.
  • started: StateFlow가 언제 시작될지를 결정하는 매개변수로, 다양한 옵션을 제공하여 Flow의 시작 시점을 제어할 수 있습니다.
  • initialValue: StateFlow의 초기값을 설정합니다.

예제

class MyViewModel : ViewModel() {
    private val _count = MutableStateFlow(0)

    val count: StateFlow<Int> = flow {
        // 데이터 발생 로직
        emit(1)
        emit(2)
        emit(3)
    }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), 0)
}

 

출처 : ChatGPT