Skip to content

LiveData -> StateFlow ์ „ํ™˜ ์ œ์•ˆย #730

@giovannijunseokim

Description

@giovannijunseokim

๋ฐฐ๊ฒฝ

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ LiveData๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UI ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
LiveData.value๋Š” ํ•ญ์ƒ nullable์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•˜๋”๋ผ๋„ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์—์„œ ๋งค๋ฒˆ null ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

// LiveData - ์ดˆ๊ธฐ๊ฐ’์„ ์คฌ๋Š”๋ฐ๋„ nullable
val state: LiveData<CoursesUiState> get() = _state

// ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ?. ๋˜๋Š” !! ํ•„์š”
state.value?.copy(...)

StateFlow๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด

// StateFlow - ์ดˆ๊ธฐ๊ฐ’์ด ๋ณด์žฅ๋˜๋ฏ€๋กœ non-null
private val _state = MutableStateFlow(CoursesUiState(...))
val state: StateFlow<CoursesUiState> = _state.asStateFlow()

// ๊ฐ’์„ ์ฝ์„ ๋•Œ null ์ฒ˜๋ฆฌ ๋ถˆํ•„์š”
val currentCourses = state.value.courses  // non-null ๋ณด์žฅ

์ฃผ์š” ์ฐจ์ด์ 

1. value nullable

์œ„ ๋ฐฐ๊ฒฝ ์„น์…˜ ์ฐธ๊ณ .

2. Lifecycle ์ธ์‹

LiveData๋Š” observe()์— LifecycleOwner๋ฅผ ๋„˜๊ธฐ๋ฉด ์•Œ์•„์„œ ๊ตฌ๋…/ํ•ด์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

// LiveData - observe๋งŒ ํ•˜๋ฉด ๋
viewModel.state.observe(this) { state -> ... }

StateFlow๋Š” ์ง์ ‘ lifecycle-awareํ•œ ์ฝ”๋ฃจํ‹ด ์Šค์ฝ”ํ”„ ์•ˆ์—์„œ collectํ•ด์•ผ ํ•œ๋‹ค.

// StateFlow - repeatOnLifecycle์œผ๋กœ ๊ฐ์‹ธ์•ผ ํ•จ
lifecycleScope.launch {
    repeatOnLifecycle(Lifecycle.State.STARTED) {
        viewModel.state.collect { state -> ... }
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    androidrefactor๊ธฐ์กด ๊ธฐ๋Šฅ ์ˆ˜์ •

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions