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

Swemo - Iteration 3: ๋ฉ”๋ชจ ํ™”๋ฉด์˜ State & Event ์ฒด๊ณ„ ์ •๋ฆฌ

interfacer_han 2026. 2. 8. 20:01

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

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

์ด์ƒ(Ideal)

์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ์ง๊ด€์ ์ธ ๋ฉ”๋ชจ ์•ฑ์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์˜๋„์— ๊ฑธ๋งž์€ ํ–‰๋™์„ ์œ ๋„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„๊ฐ€ ๋“œ๋Ÿฌ๋‚˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

Iteration 3: ๋ฉ”๋ชจ ํ™”๋ฉด์˜ State & Event ์ฒด๊ณ„ ์ •๋ฆฌ

์ง€๊ธˆ๊นŒ์ง€ ๊ตฌํ˜„ํ•œ UI๋Š” ์ผ์ข…์˜ ๋ผˆ๋Œ€์— ๋ถˆ๊ณผํ–ˆ๋‹ค. ์ด ๋ผˆ๋Œ€์— ๋ถ™์ผ๋งŒํ•œ '์‚ด'์ด๋ž€, ์‚ฌ์šฉ์ž ํ–‰๋™์— ์˜ํ•œ ์ƒํ˜ธ์ž‘์šฉ(Event) ๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ(State)์˜ ๋ณ€ํ™”๋‹ค. ์•ฑ์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•  '์ง๊ด€์ ์ธ ํ–‰๋™'์ด ๋ฌด์—‡์ธ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ , (์ข‹์€ ๋ฐฉํ–ฅ์œผ๋กœ) ์—…๋ฐ์ดํŠธ ํ•ด๋‚˜๊ฐ€์•ผ ํ•œ๋‹ค. 

 

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

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

  1. State down / Event up ๊ตฌ์กฐ ํ™•๋ฆฝ
    • Screen์€ ViewModel์„ ๋ชฐ๋ผ์•ผ ํ•จ
    • ViewModel์€ Compose State๋ฅผ ๋ชฐ๋ผ์•ผ ํ•จ
  2. ViewModel ๊ตฌํ˜„
    • ViewModel ๋ณด์œ ํ•  State์™€ UI ๋‹จ์—์„œ ๋ณด์œ ํ•  State (DrawerState ๋“ฑ)๋ฅผ ๊ตฌ๋ถ„
    • ์ด๋ฒคํŠธ ๋ฐœ์ƒ์— ๋”ฐ๋ฅธ State ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ onEvent() ํ•จ์ˆ˜ ๋ณด์œ 
  3. MemoUiState ํด๋ž˜์Šค ๊ตฌํ˜„
    • ViewModel์—์„œ ๊ด€๋ฆฌํ•  ๋ชจ๋“  State๋ฅผ Wrapping ํ•œ ํด๋ž˜์Šค
  4. MemoEvent ํด๋ž˜์Šค ๊ตฌํ˜„
    • Event sealed interface
  5. MemoScreen ์—…๋ฐ์ดํŠธ
    • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ State ๋ฐ Event๋งŒ ๋ฐ›๋„๋ก ์—…๋ฐ์ดํŠธ
    • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์„ ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ Callable Reference ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ‘œํ˜„

 

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

  1. Data layer ๊ด€๋ จ
  2. IME, focus, scroll ๊ด€๋ จ
  3. UI ๋‹ค๋“ฌ๊ธฐ
    • ์• ๋‹ˆ๋ฉ”์ด์…˜
    • ์„ธ๋ถ€ ๋ ˆ์ด์•„์›ƒ ๋ฏธ์„ธ์กฐ์ •
    • ๋””์ž์ธ ๊ฐœ์„ 
  4. ์„ฑ๋Šฅ(์ตœ์ ํ™”) ๊ด€๋ จ
    • derivedStateOf ์ตœ์ ํ™”
    • recomposition ๋ถ„์„
    • snapshotFlow ์‚ฌ์šฉ

 

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

#2-1 Iteration 3-1

์ถ”๊ฐ€ ์˜ˆ์ •.

 

#3 ํ…Œ์ŠคํŠธ

์ถ”๊ฐ€ ์˜ˆ์ •.

 

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

์ถ”๊ฐ€ ์˜ˆ์ •.