2024_11_06_meeting_minute - boostcampwm-2024/and04-Nature-Album GitHub Wiki

์ผ์‹œ: 2024-11-06

์ฐธ์„์ž: ์ •์œ ์ง„, ์ž„ํ˜•์ค€, ๋…ธ์ง„ํ™˜, ๊น€๋„์œค, ๊น€์ •ํ˜ธ

๐Ÿ’ก ์ง„ํ–‰ ์‚ฌํ•ญ

1๏ธโƒฃ [PR] Room Database ์ถ”๊ฐ€ ๋ฐ Hilt ์ ์šฉย #83

  • RoomDB+Hilt ๊ด€๋ จ PR ์ฝ”๋“œ ๋ฆฌ๋ทฐ
  • ๊ฒ€ํ†  ํ›„ dev์— Merge
    • ๋ฏธ์‚ฌ์šฉ ํด๋ž˜์Šค (User, UserDao) ์ œ๊ฑฐ

    • ํ•„์š”์—†๋Š” Flow ์ œ๊ฑฐ

    • ์ž๊พธ ๋“ฑ์žฅํ•˜๋Š” it ์ œ๊ฑฐ (also๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ)

      • synchronized ํ™œ์šฉ โ† ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ

        • ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋‚˜์š”?
          • ํ˜„์žฌ synchronized(this) ๋กœ companion object ์ž ๊ทธ๊ณ  ์žˆ๋Š” ์ƒํ™ฉ. ํด๋ž˜์Šค์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ๋™๊ธฐํ™” ๋Œ€์ƒ์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
           companion object {
                @Volatile
                private var INSTANCE: WordRoomDatabase? = null
        
                fun getDatabase(context: Context): WordRoomDatabase {
                    return INSTANCE ?: synchronized(this) {
                        val instance = Room.databaseBuilder(
                                context.applicationContext,
                                WordRoomDatabase::class.java,
                                "word_database"
                            ).build()
                        INSTANCE = instance
                        
                        // return instance
                        instance
                    }
                }
           }
        

        ์ฐธ๊ณ  ๋งํฌ

        [Double-checked Locking Pattern (DCLP) ์„ ์“ฐ์ง€ ๋ง์•„์•ผ ํ•˜๋Š” ์ด์œ ](https://herdin.github.io/2020/12/25/about-double-check-locking)

      • Holder ํ™œ์šฉ

        class Singleton private constructor() {
            // Singleton ์ธ์Šคํ„ด์Šค
            companion object {
                // Lazy ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•œ ๋‚ด๋ถ€ ํด๋ž˜์Šค
                private class Holder {
                    companion object {
                        val INSTANCE = Singleton()
                    }
                }
        
                // ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ํ•จ์ˆ˜
                val instance: Singleton
                    get() = Holder.INSTANCE
            }
        }
        

      https://yoonda.tistory.com/36

2๏ธโƒฃ Hilt ์‚ฌ์šฉ ์•ˆ๋‚ด

DataRepository์—์„œ labelDao์˜ ๋ฐ˜ํ™˜ํƒ€์ž…์„ ํ™•์ธํ•˜์—ฌ ์•Œ์•„์„œ ์ฃผ์ž…ํ•ด์คŒ

๊ทธ๋ž˜์„œ RoomModule์˜ ํ•ด๋‹น๋˜๋Š” provider๊ฐ€ ์•Œ์•„์„œ ์ฃผ์ž…ํ•ด์ฃผ๊ณ  ์žˆ๋Š” ๊ฒƒ.

๋‹ค๋ฅธ Injection์€ Module์— ์ถ”๊ฐ€ํ•˜์—ฌ ๊ด€๋ฆฌ

ViewModel์—์„œ @Inject ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด Repository๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ฃผ์ž…ํ•ด์คŒ.

Repository๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ Module์— ๋„ฃ์–ด์„œ ๊ด€๋ฆฌ

3๏ธโƒฃย ContentDescription์—๋Š” ๋ฌด์—‡์„ ์ ์„๊นŒ?

โ‡’ ์ถ”ํ›„ ๋…ผ์˜ ํ•„์š”

4๏ธโƒฃ Label์— ์ €์žฅ๋œ #์—†๋Š” String์„ ์–ด๋–ป๊ฒŒ Color๋กœ?

  • ์œ ์ง„
ackage com.and04.naturealbum.utils

import androidx.compose.ui.graphics.Color

fun String.toColor(): Color {
val colorInt = android.graphics.Color.parseColor("#$this")
return Color(colorInt)
}
  • ์ง„ํ™˜
fun String.toColor() = Color(this.toLong(16))
  • ๋„์œค
// color์— # ํฌํ•จ
Color(parseColor(color))

โ‡’ ์ถ”ํ›„ ํ†ต์ผ ํ•„์š”

๐Ÿ’กย ๋‚ด์ผ ํ•ด์•ผํ•  ๊ฒƒ

  • ๊ฐ์ž ๊ฐœ๋ฐœํ•œ ๊ฒƒ๋“ค ๋ฌธ์„œ ์ •๋ฆฌ ๋ฐ wiki ์—…๋กœ๋“œ
  • ์˜ค๋Š˜(11/6) PR ๋ณด๋‚ธ ๊ฒƒ๋“ค ๊ฒ€ํ† ํ•˜๊ณ  dev์— merge
  • ์ „์ฒด์ ์ธ ๊ฐœ๋ฐœ ๋ฌธ์„œ ์ •๋ฆฌ
  • GitHub Project ์ •๋ฆฌ(๊ฐœ๋ฐœ ๋๋‚œ ์ด์Šˆ๋“ค ๋‹ด๋‹น์ž์™€ ์‹œ๊ฐ„ ์ž…๋ ฅํ•˜์—ฌ close)
  • ๋ฐ๋ชจ ์ค€๋น„ํ•˜๊ธฐ
    • ๋ฐ๋ชจ ๊ด€๋ จ
      • ๋งค์ฃผ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ƒํ™ฉ์„ ๊ณต์œ ํ•˜๊ณ  ๊ฐœ์„ ์„ ์œ„ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ทจํ•ฉํ•˜๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
        • ํŠธ๋ž™๋ณ„๋กœ ์ง„ํ–‰ํ•˜๋ฉฐ, ํŠธ๋ž™ ํŽธ์„ฑ์€ ๋งค์ฃผ ๋ชฉ์š”์ผ ์ €๋…์— ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
      • ํŒ€ ๋‹น ๋ฐœํ‘œ(15๋ถ„)์™€ ์งˆ์˜์‘๋‹ต(5๋ถ„)์‹œ๊ฐ„์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. (์ด 20๋ถ„)
        • ๋ชฉํ‘œ ๊ธฐ๋Šฅ๊ณผ ์‹ค์ œ ๊ตฌํ˜„ ๊ฒฐ๊ณผ ๋ฐ ๊ธฐ์ˆ ์  ๊ฒฝํ—˜์— ๋Œ€ํ•ด ๋ฐœํ‘œํ•ฉ๋‹ˆ๋‹ค.
        • ๋งค์ฃผ 1๋ช… ์ด์ƒ์˜ ํŒ€์›์ด ๋Œ์•„๊ฐ€๋ฉฐ ๋ฐœํ‘œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋ชจ๋‘๊ฐ€ ํ•œ ๋ฒˆ์”ฉ์€ ๋ฐœํ‘œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์„ธ์š”. ํ•œ ์‚ฌ๋žŒ์ด ์—ฐ์† ๋ฐœํ‘œํ•˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค.)
      • ๋‹ค์Œ ๋ฐœํ‘œ ์ˆœ์„œ์ธ ํŒ€์—์„œ ๋ฐœํ‘œ์‹œ๊ฐ„์„ ์žฌ๊ณ  5๋ถ„, 10๋ถ„๋งˆ๋‹ค ์คŒ ์ฑ„ํŒ…์ฐฝ์— ์‹œ๊ฐ„์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. (ex. 5๋ถ„ ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค.)
      • ๋”์šฑ ์˜๋ฏธ์žˆ๋Š” ๊ณต์œ ๋ฅผ ์œ„ํ•ด ์ ๊ทน์ ์ธย ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
        • ํŒ€ ๋ณ„ ํ”ผ๋“œ๋ฐฑ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ”ผ๋“œ๋ฐฑ ๋…ธํŠธ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
        • ๋ฐœํ‘œ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์†Œ๊ฐ๊ณผ ํ•จ๊ป˜ ์•„๋‚Œ์—†๋Š” ๊ฒฉ๋ ค์™€ ์นญ์ฐฌ์„ ํ•ด์ฃผ์„ธ์š”.
        • ๋” ์ข‹์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก ์ƒˆ๋กœ์šด ๊ด€์ ์—์„œ ํ”ผ๋“œ๋ฐฑ์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        • ๋™๋ฃŒ๊ฐ€ ๋ฐํžŒ ์–ด๋ ค์›€์„ ํ•จ๊ป˜ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ˜น์€ ๊ธฐ์ˆ ์ ์œผ๋กœ ๋” ๊ณ ๋ฏผํ•˜๋ฉด ์ข‹์„๋งŒํ•œ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์˜๊ฒฌ ์ œ์‹œ๋Š” ๋”์šฑ ์ข‹์Šต๋‹ˆ๋‹ค!
  • ๋ฐœํ‘œ ์ž๋ฃŒ ๋งŒ๋“ค๊ธฐ
  • ๋ฐœํ‘œ ์ค€๋น„ ํ•˜๊ธฐ โ† ํ˜•์ค€
  • ๋ฉ˜ํ† ๋‹˜๊ณผ์˜ ๋ง›์žˆ๋Š” ์ €๋… ๋ฉ”๋‰ด ์ •ํ•˜๊ธฐ
  • ๋ฉ˜ํ† ๋‹˜๊ณผ ์ฆ๊ฑฐ์šด ์ €๋…๋ณด๋‚ด๊ธฐ ๐Ÿ‘