๊ฐœ๋ฐœ ์ผ์ง€ ๐Ÿ’ป/Swemo

Swemo - Iteration 6: MVP 1 ๊ตฌํ˜„ (3/3)

interfacer_han 2026. 6. 25. 18:18

#1 ๊ฐœ๋ฐœ ๋ชฉํ‘œ (Iteration Goal)

#1-1 ์ด์ƒ(Ideal)๊ณผ ์ง•๊ฒ€๋‹ค๋ฆฌ

Iteration 6: MVP 1 ๊ตฌํ˜„ (3/3)

Iteration 5์—์„œ ํ™”๋ฉด(UI)๋ฅผ ์•ฝ๊ฐ„ ๋‹ค๋“ฌ๊ณ , ๋‚ด๋ถ€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ์†๋ดค๋‹ค.

 

#1-2 ๊ฐœ๋ฐœ ๋ฒ”์œ„

์ด๋ฒˆ ๊ฐœ๋ฐœ ๋ฒ”์œ„ (In Scope)

  1. UI ๋‹ค๋“ฌ๊ธฐ
  2. ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

 

๋ฒ”์œ„ ์™ธ (Out of Scope)

  1. ๊ธฐ๋Šฅ ์ถ”๊ฐ€ใ†์ˆ˜์ •ใ†์‚ญ์ œ

 

#2 ๋ณ€๊ฒฝ ๋‚ด์—ญ (์ปค๋ฐ‹ ๋ชฉ๋ก)

#2-1 Iteration 6-1: UI ๋‹ค๋“ฌ๊ธฐ

์ฃผ์š” ๋ณ€๊ฒฝ์ 

  • Preview๊ฐ€ ๋ˆ„๋ฝ๋œ ์ปดํฌ๋„ŒํŠธ์— Preview ์ถ”๊ฐ€
  • memo ๋ชจ๋“ˆ ์ „์šฉ ์ปดํฌ๋„ŒํŠธ์— internal ์ ‘๊ทผ์ œ์–ด์ž ๋ถ™์ž„
  • MemoFeed์˜ LazyColumn์— bottom padding์„ ์ค˜์„œ, FAB๊ฐ€ Memo๋ฅผ ๊ฐ€๋ฆฌ์ง€ ์•Š๊ฒŒ ํ•จ

 

์Šคํฌ๋ฆฐ์ƒท

์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋กค์„ ๋๊นŒ์ง€ ๋‚ด๋ ธ์„ ๋•Œ, FAB๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ด ์ƒ๊ฒผ๋‹ค.

 

์ฝ”๋“œ ์Šค๋‹ˆํŽซ

@Composable
internal fun MemoFeed(
    memos: List<Memo>,
    modifier: Modifier = Modifier,
    onMemoClick: (Memo) -> Unit = {},
    onMemoLongClick: (Long) -> Unit = {},
) {
    LazyColumn(
        ...
        contentPadding = PaddingValues(bottom = 80.dp)
    ) {
        items(
            ...
        ) { memo ->
            ...
        }
    }
}

"์ € 80.dp ๊ฐ’์„ ์ •์  ๊ณ„์‚ฐ์ด ์•„๋‹Œ ๋™์  ๊ณ„์‚ฐ์œผ๋กœ ์ฆ‰, ์†Œํ”„ํŠธ์ฝ”๋”ฉ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋‚˜?"๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋” ์šฐ์•„ํ•œ ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜จ๋‹ค๋Š” ์  ์™ธ์—๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•  ์ด์œ ๊ฐ€ ์—†์—ˆ๋‹ค.

 

์ฐธ๊ณ 

 

#2-2 Iteration 6-2: MemoViewModel์˜ ์ด๋ฒคํŠธ ๊ฐœ์„ 

์ฃผ์š” ๋ณ€๊ฒฝ์ 

  • MemoViewModel์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๊ธฐ ์ข‹๊ฒŒ ์ •๋ ฌํ•˜๊ณ  ์ฃผ์„ ์ถ”๊ฐ€, MemoScreen๊ณผ MemoScreen์˜ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ MemoViewModel์—์„œ์˜ ์ด๋ฒคํŠธ ์ˆœ์„œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅด๊ฒŒ ๋‹ค๋“ฌ์Œ
  • ์ธ์ˆ˜๋ฅผ ๋ฐ›์ง€ ์•Š๋Š” ์ผ๋ถ€ ์ด๋ฒคํŠธ๋“ค์ด ์ธ์ˆ˜๋ฅผ ๋ฐ›๊ฒŒ ์„ค์ • (์žฌ์‚ฌ์šฉ์„ฑ↑)
  • MemoViewModel์— ์ •์˜ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” MemoScreen์˜ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๊ฐœ์„ 

 

์ฐธ๊ณ 

 

#3 ๊ฐœ๋ฐœ ๊ฒฐ๊ณผ (Iteration Outcome)

์–ด์ฐŒ ๋˜์—ˆ๋“ , ์ผ๋‹จ ์“ธ ์ˆ˜๋Š” ์žˆ๋Š” ์•ฑ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด์ œ ์ด๊ฑธ ์ง์ ‘ ์‚ฌ์šฉํ•ด ๋ณด๋ฉฐ ๋น ๋ฅด๊ฒŒ ๊ณ ๋„ํ™”ํ•˜๊ฒ ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ๋„ˆ๋ฌด ๊ฑฐ์ฐฝํ•œ ๊ฑธ ๊ตฌํ˜„ํ•˜์ง„ ์•Š์„ ๊ฒƒ์ด๋‹ค.

 

๋˜, ์ดํ›„๋ถ€ํ„ฐ ์†์œผ๋กœ ์ง์ ‘ ํ•˜๋Š” ์ฝ”๋”ฉ์„ ๋Œ€ํญ ์ค„์ผ ๊ฒƒ์ด๋‹ค. ๋‹จ์ˆœํžˆ ์‹œ๋Œ€์  ์ถ”์„ธ๋ฅผ ์ซ“๊ธฐ ์œ„ํ•จ์ด๋‹ค. ํ•˜์ง€๋งŒ ๋ณธ์งˆ์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์‚ฌ๋žŒ์ด๋‹ˆ๊นŒ. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ '์ฒ™'ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด, "์™œ?"๋ผ๋Š” ์งˆ๋ฌธ์— ๋…ผ๋ฆฌ์ •์—ฐ์ด ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ์–ด์•ผ๊ฒ ์ง€. ๊ธฐ๋ณธ์œผ๋กœ ๋Œ์•„๊ฐ€์ž.