๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90

๐Ÿค2024 ์•ˆ๋“œ๋กœ์ด๋“œ/Filmo ์˜ํ™” ํ”„๋กœ์ ํŠธ35

์—ฌ๋Ÿฌ ๊ฐœ์˜ flow์„ combine์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ Combine์œผ๋กœ ์—ฌ๋Ÿฌ flow ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ์— ๋ณด์—ฌ์ค„ ์•„์ดํ…œ์€ ์—ฌ๋Ÿฌ api ์‘๋‹ต๊ฐ’์„ ์กฐํ•ฉํ•ด์„œ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.์ข‹์•„์š” ์ƒํƒœ ๊ฐ’์„ likeRepository์˜ checkLikeํ•จ์ˆ˜๋กœ ๋ถ€ํ„ฐ ๋ฐ›๊ณ  emit ํ•ด์ฃผ๋Š” flow๋ฅผ ์ž‘์„ฑํ•ด์ค€ ํ›„ ์ด๋ฅผ ๋ทฐ๋ชจ๋ธ์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ ค๊ณ  ํ•˜์˜€๋‹ค.!!class GetLikeStateUseCase @Inject constructor(private val likeRepository: LikeRepository) { operator fun invoke(reportId: String): Flow = flow { val result = likeRepository.checkLike(reportId = reportId) emit(resul.. 2024. 7. 5.
์ฝ”๋“œ ์งˆ๋ฌธ & ๋‹ต๋ณ€ ์ •๋ฆฌ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—๋•Œ๋Š” 6์›” 22์ผ ์ฃผ๋ง ์ €๋…์— ํ•จ๊ป˜ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ถ„๊ณผ ๋ฏธํŠธ๋กœ ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ๋‚˜๋ˆ„๋Š” ์†Œ์ค‘ํ•œ ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ๋‹ต๋ณ€์œผ๋กœ ๋“ค์—ˆ๋˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋‘๊ณ  ๊ณต๋ถ€ํ•ด๋ณด๋ ค ํ•œ๋‹ค!!  event์™€ effect์˜ ์ฐจ์ด์ง€๋‚œ ๋ฒˆ pr์„ ํ†ตํ•ด ์งˆ๋ฌธ์„ ๋“œ๋ฆฐ ์ ์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์™„์ „ํžˆ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์งˆ๋ฌธ์„ ๋“œ๋ ธ๋‹ค.๋‹ต๋ณ€์€ ์•„๋ž˜์™€ ๊ฐ™์•˜๋‹ค. event๋Š” ์‚ฌ์šฉ์ž ์š”์ฒญ, ์‚ฌ์šฉ์ž ํ–‰์œ„์™€ ๊ด€๋ จ๋œ ๊ฒƒeffect๋Š” ์ด๋ฒคํŠธ ๋Œ€์ƒ์œผ๋กœ ๋ฐœ์ƒ๋œ ๊ฒƒ์œผ๋กœ, ์ด๋ฒคํŠธ์˜ ๊ฒฐ๊ณผ๋กœ์„œ ui์˜ ์ƒํƒœ ๋ณ€ํ™” ๋“ฑ์ด ํฌํ•จ๋œ๋‹ค. ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚˜๋ฉด click event -> click listener -> effect (์ด๋ฒคํŠธ ๊ฒฐ๊ณผ)ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋ฉด -> handle event -> ui ์ƒํƒœ ๋ณ€ํ™˜ side effect !!.. 2024. 6. 24.
Android LiveData & StateFlow ์ฐจ์ด ๋น„๊ตํ•ด๋ณด๊ธฐ(์ž‘์„ฑ์ค‘) ๐Ÿ˜„๋“ค์–ด๊ฐ€๊ธฐ ์ „์—Android ๋ทฐ์— ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ทฐ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ์ด๋ฅผ ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ์— ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด LiveData๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.ViewModel๊ณผ LiveData ๊ทธ๋ฆฌ๊ณ  StateFlow์— ๋Œ€ํ•ด ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๋ฉฐ ์ดํ•ดํ•ด๋ณด๋ ค ํ•œ๋‹ค. ํŠนํžˆ LiveData์™€ StateFlow์˜ ๊ธฐ๋Šฅ์ด ์œ ์‚ฌํ•œ๋ฐ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋‹ค!๐ŸซฑUI ์ปจํŠธ๋กค๋Ÿฌ๋ž€?UI ์ปจํŠธ๋กค๋Ÿฌ์—๋Š” ํฐ ํ™”๋ฉด ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ์™€ ๋ถ€๋ถ„ ํ™”๋ฉด์„ ์ด๋ฃจ๋Š” ํ”„๋ž˜๊ทธ๋จผํŠธ๊ฐ€ ์žˆ๋‹ค. UI ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ™”๋ฉด์— ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ๋‚˜ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ชจ๋“  UI ๊ด€๋ จ ๋™์ž‘์„ ํฌ์ฐฉํ•˜์—ฌ UI๋ฅผ ์ œ์–ดํ•œ๋‹ค. ์ด ๋•Œ ์•ฑ์˜ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ๋กœ์ง์€ UI ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค์— ํฌํ•จ๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค.. 2024. 6. 14.
Android Recyclerview : no attached adapter , skipping layout ์—๋Ÿฌ ํ•ด๊ฒฐ ๊ณผ์ • ๊ธฐ๋ก ๐Ÿ”Ž๋ฌธ์ œ ์ƒํ™ฉ๋ฉ”์ธ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚  ๋•Œ ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.๐Ÿซฑ์‹œ๋„ํ•œ ๋ฐฉ๋ฒ•๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ๋ช‡๊ฐ€์ง€ ์›์ธ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ํ•ด๋‹น ๋‚ด์šฉ์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด์•˜๋‹ค.1๏ธโƒฃsetAdapter๊ฐ€ ์ž˜ ๋˜๊ณ ์žˆ๋Š”์ง€ ํ™•์ธํ”„๋ž˜๊ทธ๋จผํŠธ์—์„œ onViewCreated, onCreateView ์œ„์น˜ ๋ชจ๋‘์— ์ ์šฉํ•ด๋ณด์•˜์ง€๋งŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค.2๏ธโƒฃ๋ ˆ์ด์•„์›ƒ ๋งค๋‹ˆ์ €๊ฐ€ ์ž˜ ์„ค์ •๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ”„๋ž˜๊ทธ๋จผํŠธ ์ƒ์—์„œ ๋ ˆ์ด์•„์›ƒ ๋งค๋‹ˆ์ €๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ xml ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ ์ƒ์—์„œ ์„ค์ •ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋‘ ์‹œ๋„ํ–ˆ์ง€๋งŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค. - ํด๋ž˜์Šค ๋‚ด์—์„œ ๋ ˆ์ด์•„์›ƒ ๋งค๋‹ˆ์ € ์„ค์ •binding.reviewRecyclerView.layoutManager = LinearLayoutManager(context) - ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ์—์„œ ๋ ˆ์ด์•„์›ƒ ๋งค๋‹ˆ์ € ์„ค์ •  3๏ธโƒฃ.. 2024. 5. 15.
728x90