๋ชฉ์ฐจ
Combine์ผ๋ก ์ฌ๋ฌ flow ์ฒ๋ฆฌํ๊ธฐ
๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ ๋ณด์ฌ์ค ์์ดํ ์ ์ฌ๋ฌ api ์๋ต๊ฐ์ ์กฐํฉํด์ ๋ง๋ค์ด์ผํ๋ค.
์ข์์ ์ํ ๊ฐ์ likeRepository์ checkLikeํจ์๋ก ๋ถํฐ ๋ฐ๊ณ emit ํด์ฃผ๋ flow๋ฅผ ์์ฑํด์ค ํ ์ด๋ฅผ ๋ทฐ๋ชจ๋ธ์์ ์ฒ๋ฆฌํด์ฃผ๋ ค๊ณ ํ์๋ค.!!
class GetLikeStateUseCase @Inject constructor(private val likeRepository: LikeRepository) {
operator fun invoke(reportId: String): Flow<Boolean> =
flow {
val result = likeRepository.checkLike(reportId = reportId)
emit(result.getOrNull() ?: false)
}.catch {
Timber.e(it)
}
}
๊ฒฐ๊ณผ
๐↔๏ธ๋ฌธ์ ๋ฐ์
๊ทธ๋ฐ๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. ์ข์์ ์ํ๋ฅผ ์๊ธฐ ์ํด์๋ ๊ฒ์๊ธ์ ์์ด๋๋ฅผ ๋๊ฒจ์ค์ผํ๋๋ฐ ์ด๊ฑธ ์ด๋ป๊ฒ ๋๊ฒจ์ค์ผํ ๊น...
์ฐ์ ํ์ฌ์ ๊ฐ์ด ๋์์ combine ํด์ค ์ ์๊ฒ ๋์๋ค.
๊ณต์๋ฌธ์๋ฅผ ๋ณธ ํ ์ ์ฅ์ ๊ฒฐํฉ ๋ฐฉ์์ ๋ํด ์๊ฒ ๋์๋ค. ์ด๋ฅผ ์ฌ์ฉํด์ ์ฌ๋ฌ ๊ฐ์ usecase๋ก ๋๋์ง ์๊ณ ํ๋์ usecase์์ ์ฒ๋ฆฌํด์ฃผ๋๋ก ๋ณ๊ฒฝํ๋ฉด ์ด๋จ๊น?
์๋ํ๋ฉด ์ข์์ ์ํ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ ๊ฐ์๋ฌธ์ id๊ฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค!
์ฐธ๊ณ ํ ์ ์ฅ์ ๊ฒฐํฉ ์ฝ๋
/**
* This use case fetches the latest news and the associated author.
*/
class GetLatestNewsWithAuthorsUseCase(
private val newsRepository: NewsRepository,
private val authorsRepository: AuthorsRepository,
private val defaultDispatcher: CoroutineDispatcher = Dispatchers.Default
) {
suspend operator fun invoke(): List<ArticleWithAuthor> =
withContext(defaultDispatcher) {
val news = newsRepository.fetchLatestNews()
val result: MutableList<ArticleWithAuthor> = mutableListOf()
// This is not parallelized, the use case is linearly slow.
for (article in news) {
// The repository exposes suspend functions
val author = authorsRepository.getAuthor(article.authorId)
result.add(ArticleWithAuthor(article, author))
}
result
}
}
'๐ค2024 ์๋๋ก์ด๋ > ๐ฟ ์ํ ํ๋ก์ ํธ ๊ฐ๋ฐ ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Android : ๊ฐ์๋ฌธ ๋ฑ๋ก ๊ณผ์ ์ ๋ฆฌ (5) | 2024.08.29 |
---|---|
๐ ๋ฆฌ์คํธ ์ด๊ธฐํ์ ์ค์์ฑ.. (0) | 2024.08.24 |
์ฝ๋ ์ง๋ฌธ & ๋ต๋ณ ์ ๋ฆฌ (0) | 2024.06.24 |
Android LiveData & StateFlow ์ฐจ์ด ๋น๊ตํด๋ณด๊ธฐ(์์ฑ์ค) (0) | 2024.06.14 |
Android Recyclerview : no attached adapter , skipping layout ์๋ฌ ํด๊ฒฐ ๊ณผ์ ๊ธฐ๋ก (0) | 2024.05.15 |