Week3 Mentor Meeting - boostcampwm-2021/android05-boomerang GitHub Wiki

Android05- Kotlin Is Good

๋ฉ˜ํ† ๋งŒ๋‚จ with Question

MVVM

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋Š” MVVM ํ˜•ํƒœ๋ฅผ ๋”ฐ๋ฅด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. DoodleLightFragment๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ViewModel์—์„œ Local DataSource์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ DoodleLightFragment์—์„œ๋Š” ํ˜„์žฌ ViewModel์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ ํ™€๋”๋กœ์จ์˜ ์—ญํ• ๋งŒ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด์„œ MVVM ์Šค๋Ÿฝ์ง€ ์•Š๋‹ค๋ผ๊ณ  ๋Š๊ผˆ๋Š”๋ฐ ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ํ™”๋ฉด๋ณ„๋กœ ๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ ์šฉ๋˜๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ์€์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

DiffUtil

  • DiffUtil์ด call ๋˜๋Š” ๊ฒƒ์ด ๋‹ค๋ฅธ list๊ฐ€ submitlist๋์„ ๋•Œ๋กœ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. VideoDoodleLightViewModel์—์„œ๋Š” Fragment์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐ›์•„์™€์„œ ViewModel์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์„ ์ทจํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ ๊ณ„์† ๊ฐ™์€ ๋ฆฌ์ŠคํŠธ๊ฐ€ submitlist ๋˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜์–ด DiffUtil์ด call ์•ˆ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ViewModel์˜ Listํ˜•ํƒœ์˜ LiveData์˜ ๋ฐ์ดํ„ฐ์— ์•„์ดํ…œ ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ DiffUtil์ด call๋˜๊ฒŒ ํ•˜๋ ค๋ฉด ์–ด๋– ํ•œ ๋ฐฉ์‹์ด ์žˆ์„๊นŒ์š”? (ํ˜„์žฌ๋Š” List์— ์•„์ดํ…œ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์— value.toMutableList๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐฑ์‹ ํ•ด์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)

๋ฆฌ์ŠคํŠธ ์–ด๋Œ‘ํ„ฐ

  • ๋ฆฌ์ŠคํŠธ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์— notify___ ํ•จ์ˆ˜๋“ค์„ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š” ๊ฑธ๋กœ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์— notify ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋Š”์ง€, ์•„๋‹ˆ๋ฉด ์œ— ์งˆ๋ฌธ์ฒ˜๋Ÿผ ํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค๋ฅธ ๋ฆฌ์ŠคํŠธ๋กœ ์ธ์‹ํ•˜๋Š” ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋น„์Šทํ•œ UI๊ฐ€ ์‚ฌ์šฉ๋˜์ง€๋งŒ ๋กœ์ง์ด ์กฐ๊ธˆ ๋‹ค๋ฅธ Fragment

  • ํ•ด๋‹น ์ƒํ™ฉ์—์„œ ์ƒˆ๋กœ์šด Fragment ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅผ์ง€ ์•„๋‹ˆ๋ฉด ๊ธฐ์กด Fragment ํด๋ž˜์Šค์— ๋กœ์ง์„ ์ถ”๊ฐ€ ํ•˜๋Š”๊ฒŒ ๋‚˜์€์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. (๋‹ค๋ฅธ ์ง„์ž…์ ์—์„œ ์ ‘๊ทผ์‹œ)

์žฌ์‹œ์ž‘ ๋ฌธ์ œ

  • ๋žจ์ด ๋‹ค ์ฐจ์„œ ์‚ฌ๋ผ์ง„๋Š ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ๋ฐฉ์ง€ํ•ด์•ผํ• ์ง€

ํ…Œ์ŠคํŠธ ์•ฑ ๋ฐฐํฌ

  • ์šฐ๋ฆฌ๊ฐ€ Firebase์—์„œ ๋ฐฐํฌํ•˜๊ณ  ์žˆ๋Š”๋ฐ ํ…Œ์ŠคํŠธ ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ๋Š”์ง€(Ivy๋‹˜๋„ ๋ฐ›๊ณ  ๊ณ„์…”์„œ ๋ฌผ์–ด๋ด„)

์„œ๋น„์Šค ํ”ผ๋“œ๋ฐฑ ๊ด€์  ์งˆ๋ฌธ

  • ๊ฐ€๋Šฅํ•œ์ง€?
  • ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์–ด๋–ค ๊ด€์ ์—์„œ ํ•ด์ฃผ์‹ค ์˜ˆ์ •์ธ์ง€(๊ทธ์— ๋งž๋Š” ์งˆ๋ฌธ์„ ์ค€๋น„ํ•  ์˜ˆ์ •)

๋ฐ๋ชจ ์‹œ๋‚˜๋ฆฌ์˜ค

์„ ํ–‰: ํ™”๋ฉด์— 3๊ฐœ ์ด์ƒ์˜ ๋™์˜์ƒ๋ฉ”๋ชจ

ํ™ˆํ™”๋ฉด : ๊ฒ€์ƒ‰, ์ •๋ ฌ, FAB

๊ฐค๋Ÿฌ๋ฆฌ ํ™”๋ฉด : ์ง€๋‚˜๊ฐ€๋Š” ํ™”๋ฉด

๋ชจ๋‘์˜ ๋ฉ”๋ชจ ํ™”๋ฉด: Play -> ๋ถ€์บ  ์ ๊ธฐ -> ์บก์ณ ๋ชจ๋‘์˜ ๋ฉ”๋ชจ ํŽธ์ง‘: ์žฌ์ƒ -> ์ œ๋ชฉ ์ ๊ธฐ -> ์ €์žฅ ๋‹ค์‹œ ํ™ˆํ™”๋ฉด์œผ๋กœ ๋Œ์•„์™€์„œ: ๋‚ด๋ถ€ ํด๋”์— ์กด์žฌํ•˜๋Š” outputVideo ํ™•์ธ -> ์†์„ฑ์—์„œ ํ”„๋ ˆ์ž„ ํ™•์ธ

Sub: ๋ฉ”๋ชจ 2๊ฐœ ์ž‘์„ฑ ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฐ x ๋ˆ„๋ฅด๋ฉด ์ž‘์„ฑ๋œ subvideo ํŒŒ์ผ ์‚ญ์ œ ๋ฉ”๋ชจ ์œ„์— ๋ฉ”๋ชจ ํ• ๋•Œ ํ† ์ŠคํŠธ ๋ฉ”์‹œ์ง€ ๋ฉ”๋ชจ ์•ž์— ๋ฉ”๋ชจ ํ• ๋•Œ ๋ฎ์–ด์”Œ์›Œ์„œ ์ง€์›Œ์ง€๊ธฐ ์„œ๋ธŒ๋น„๋””์˜ค ๋ณด์—ฌ์ง€๋Š” ๋ชจ์Šต ์–ธ๊ธ‰ ์ƒ‰๊น” ๋ณด์—ฌ์ฃผ๊ธฐ ํŽธ์ง‘ํ™”๋ฉด์—์„œ ํ™•์ธ ์ €์žฅ ํ›„ ํ™ˆํ™”๋ฉด์—์„œ ํ™•์ธ