/on_off_flutter

ON & OFF Flutter Project

Primary LanguageDart

๋ฐฐ๋„ˆ



๐Ÿ’ผ ์ผ๊ณผ ์ผ์ƒ์„ ๋ถ„๋ฆฌํ•ด๋ณด์„ธ์š” ๐Ÿ›€

์‚ถ๊ณผ ์ผ์ƒ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์†Œ์†Œํ•œ ๋‚˜๋งŒ์˜ ํ•˜๋ฃจ๋ฅผ ๊ธฐ๋กํ•ด๋ณด์„ธ์š”.

  • ๐Ÿ“… ON : ๋ฏธํŒ… ์‹œ๊ฐ„์ด ํ—ท๊ฐˆ๋ฆฌ์…จ๋‚˜์š”? ๋ถ„์ฃผํ•œ ์ผ๊ณผ ์†์—์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋‹น์‹ ์˜ ์ผ์ •์„ ํ™•์ธํ•ด๋ณด์„ธ์š”.
  • ๐Ÿ“… OFF : ํ‡ด๊ทผ, ํ•™์—… ๋“ฑ๋“ฑ ์ผ์ƒ์—์„œ ๋ฐ”์˜๊ฒŒ ์›€์ง์˜€๋˜ ๋‚˜๋ฅผ ์ž ์‹œ ๋‚ด๋ ค๋†“๊ณ  '์˜จ์ „ํžˆ ๋‚˜๋ฅผ ์œ„ํ•œ' ์˜ค๋Š˜ ํ•˜๋ฃจ๋ฅผ ๊ธฐ๋กํ•ด๋ณด์„ธ์š”.

๊น€๋ณด์„ฑ ๊น€์ƒ์™„ ์žฅ์œค์ • ํ—ˆ์ง€์›
@mysend12 @ @ @hunnypooh

์ฃผ์š” ๊ธฐ๋Šฅ ์†Œ๊ฐœ

์‹คํ–‰ ํ™”๋ฉด

๊ธฐ์ˆ ์  ๋„์ „

ํด๋ฆฐ ์•„ํ‚คํ…์ณ (MVVM)

๋‹จ๋ฐœ์„ฑ์œผ๋กœ ๋๋‚˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ, ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉฐ ๊ฐ™์ด ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ์ด๋‹ค ๋ณด๋‹ˆ ๋งค์ผ๊ฐ™์ด ๋ณด๋Š” ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ์„œ ๋” ๊น”๋”ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ํ•œ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์•Œ์•„๋ณด์•˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ MVVM ํŒจํ„ด์ด ์ ํ•ฉํ•˜๋‹ค๋Š” ํŒ๋‹จ์ด ๋“ค์–ด์„œ ์ ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ฆฐ ์•„ํ‚คํ…์ณ ๊ตฌ์กฐ๋„

์•„ํ‚คํ…์ฒ˜

  1. MVC ์šฐ๋ฆฌ๊ฐ€ ์ฐพ์•„๋ณธ ์•„ํ‚คํ…์ฒ˜ ์ค‘ ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜์—ฌ, ๋‹น์‹œFlutter๋ฅผ ์ด์ œ ๋ง‰ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋˜ ์šฐ๋ฆฌ์—๊ฒŒ ๊ฐ€์žฅ ์ ํ•ฉํ–ˆ๋˜ ์•„ํ‚คํ…์ฒ˜์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์œ ๋กœ ์ด ํ”„๋กœ์ ํŠธ๋Š” ์†์‰ฝ๊ฒŒ ์œ ์ง€ ๋ณด์ˆ˜ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๊ฐ€ ์ค‘์š”ํ–ˆ๊ณ , ๋‹ค๋ฅธ ํŒจํ„ด๋“ค์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์–ด๋ ต๋‹ค๋Š”์  ๋•Œ๋ฌธ์— ์„ ํƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

  2. MVP MVC์— ๋น„ํ•ด์„œ ๊ณ„์ธต ๋ถ„๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•ด์กŒ๊ณ  view์™€ model์ด ๋ถ„๋ฆฌ๋˜์—ˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐพ์•„๋ณด๋ฉด view์™€ presenter๊ฐ€ 1:1๋กœ ๋งคํ•‘๋˜์–ด ์˜์กด์„ฑ์ด ๋†’๋‹ค๋Š” ๋‹จ์ ์„ ๋งŽ์ด ์ด์•ผ๊ธฐํ•˜์ง€๋งŒ, ON & OFF์˜ ํŠน์„ฑ์ƒ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์€ ํ™”๋ฉด์ด ํ•„์š”ํ•˜์ง€ ์•Š์„๊ฑฐ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค๊ธฐ๋„ ํ•˜๊ณ  ๋‚œ์ด๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋‚ฎ๋‹ค๋Š”์  ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๋งŽ์ด ๊ณ ๋ฏผํ–ˆ๋˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

  3. FLUX ๋‹จ๋ฐฉํ–ฅ ํŒจํ„ด์œผ๋กœ, ์˜์กด๋„๊ฐ€ ๋งค์šฐ ๋งŽ์ด ๋‚ฎ์•„์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ต‰์žฅํžˆ ํŽธํ• ๊ฑฐ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์€ ๋“ค์—ˆ์ง€๋งŒ, ์‚ฌ์‹ค ๋‹น์‹œ ์ฒ˜์Œ Flutter๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์ž…์žฅ์—์„œ๋Š” ๊ต‰์žฅํžˆ ์–ด๋ ต๊ฒŒ ๋Š๊ปด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์„ ํƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

  4. MVVM ์ฐพ์•„๋ณด๋Š” ๋‹น์‹œ ์‚ด์ง ๋‚œ์ด๋„๊ฐ€ ์žˆ์–ด๋ณด์ด๋Š” ํŒจํ„ด์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์•„๋ž˜์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์œ ๋กœ MVVM์„ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  5. view์™€ model ๊ฐ„์˜ ์˜์กด์„ฑ์ด ์—†์œผ๋ฉฐ, viewModel ๋˜ํ•œ view์™€ ์–‘๋ฐฉํ–ฅ์ด ์•„๋‹ˆ๋ผ๋Š” ํŠน์ง• ๋“ฑ์œผ๋กœ ๋‹ค๋ฅธ ํŒจํ„ด๊ณผ ๋น„๊ตํ–ˆ์„๋•Œ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ๋” ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  6. ๋‹น์‹œ์— ์ด๋ฏธ Flutter์—์„œ MVVM์„ ์ ์šฉํ•˜๋Š”๊ฒƒ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋งŽ์ด ์žˆ์—ˆ๊ณ  ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋“ค๋„ ์‰ฝ๊ฒŒ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋„์ž…ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ MVC ํ˜น์€ MVP์™€ ๋น„๊ตํ•˜์—ฌ ๋‚œ์ด๋„๊ฐ€ ๋†’์€๊ฑด ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š๋‹ค๊ณ  ํŒ๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

์œ„์˜ 3๊ฐ€์ง€ ์ด์œ ๋กœ MVVM ํŒจํ„ด์„ ์ตœ์ข…์ ์œผ๋กœ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์กฐ

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํฌ๊ฒŒ 4๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์Šต๋‹ˆ๋‹ค.

  1. di ์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•œ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
  2. data ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—ฐ๋™์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ถ”ํ›„ API๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด remote API ํ˜ธ์ถœ์„ ์œ„ํ•œ ์˜์—ญ์œผ๋กœ, data_source๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  3. domain ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์˜์—ญ์œผ๋กœ, model ๋ฐ entity์™€ use_case๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ui ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ์˜์—ญ์œผ๋กœ, view์™€ view_model์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธฐ์˜ ON&OFF๋Š” ๊ทœ๋ชจ๊ฐ€ ์ž‘์•˜๊ณ , ๋งŒ์•ฝ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ ธ repository๊ฐ€ ํ•„์š”ํ•ด์กŒ์„๋•Œ ์ถ”๊ฐ€ํ•˜๋Š”๊ฑด ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„๊ฑฐ๋ผ๋Š” ํŒ๋‹จ์ด ๋“ค์–ด ๋น ๋ฅธ ๊ฐœ๋ฐœ์„ ์œ„ํ•˜์—ฌ ์–ด๋Œ‘ํ„ฐ์˜ ์—ญํ• ์„ ํ•˜๋Š” repository๋ฅผ ์ œ์™ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Provider & Observer Pattern

๋„์ž… ์ด์œ 

  • ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ์ ๊ณ , BuildContext๋ฅผ ์ด์šฉํ•œ ์˜์กด์„ฑ ์ฃผ์ž…์ด ๊ฐ€๋Šฅํ•œ Provider๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • View model, ํ™”๋ฉด ๋งˆ๋‹ค Provider๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋งŽ์€ Provider๋ฅผ ๋“ฑ๋กํ•ด์„œ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฐ์ง€๊ฐ€ ์ผ๋ถ€ ์›ํ™œํžˆ ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Provider๊ฐ€ Observer ํŒจํ„ด ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ, ์ด์ƒ์ด ์žˆ๋Š” ํ™”๋ฉด๊ณผ ๊ด€๋ จํ•ด์„œ ์ถ”๊ฐ€๋กœ Observer ํŒจํ„ด์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋„์ž… ๊ฒฐ๊ณผ

  • ๋ชจ๋“  ํ™”๋ฉด์—์„œ ์ƒํƒœ๋ณ€๊ฒฝ์ด ์›ํ™œํžˆ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋™๊ธฐ๋กœ DB ์„ค์ • ํ›„ provider์˜ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (lib/di/provier_setup.dart)

ํ˜‘์—… ๋ฐฉ์‹

๊ฑฐ์˜ ์˜จ๋ผ์ธ 100% ์ง„ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜‘์—…๋ฐฉ์‹์„ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šฌ๋ž™/ํ”ผ๊ทธ๋งˆ ๋“ฑ์œผ๋กœ ์„œ๋กœ ํšŒ์˜๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๋‚ด์šฉ ๋ฐ ์ง„๋„๋ฅผ ์ •๋ฆฌํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€์œผ๋ฉฐ, ์™„์„ฑ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Slack

์Šฌ๋ž™ ํ™œ๋™ ํ™”๋ฉด ์Šฌ๋ž™ ํ™œ๋™ ํ™”๋ฉด 2

  • ๊ฐ ๋ถ„์•ผ๋ณ„๋กœ ์ฑ„๋„์„ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๋ถ„์•ผ์— ๊ถ๊ธˆํ•œ์ ๊ณผ ์–˜๊ธฐํ•  ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ ๋ถ„์•ผ์˜ ์ฑ„๋„์— ๋‚จ๊ฒจ์„œ ๋น ๋ฅธ ์˜์‚ฌ์†Œํ†ต์ด ์ด๋ค„์กŒ์Šต๋‹ˆ๋‹ค.

Figma

ํ”ผ๊ทธ๋งˆ ์ฝ”๋ฉ˜ํŠธ ํ™”๋ฉด

  • ๋””์ž์ธ ํŒ€์—์„œ ํ”ผ๊ทธ๋งˆ๋กœ ํ™”๋ฉด UI๋ฅผ ๊ณต์œ ํ•˜๊ณ , UI์— ๋งž๊ฒŒ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๊ถ๊ธˆํ•œ์ ์€ ํ•ด๋‹น ์ง€์ ์— ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๊ณ  ๋‹ต๋ณ€์„ ๋ฐ›์œผ๋ฉด์„œ ์†Œํ†ตํ–ˆ์Šต๋‹ˆ๋‹ค.

Git flow

๊นƒํ—ˆ๋ธŒ ์ด์Šˆ ๊นƒ ๊ทธ๋ž˜ํ”„

  • ๊นƒ์—์„œ๋Š” ํฌ๊ฒŒ ๋‘๊ฐ€์ง€ ๋ธŒ๋žœ์น˜ 1.master(๋ฐฐํฌ๋œ ์ฝ”๋“œ) 2.develop(๊ฐœ๋ฐœ์ค‘์ธ ์ฝ”๋“œ)๋ฅผ ๋งŒ๋“ค๊ณ , develop ์•„๋ž˜์— feat/๊ธฐ๋Šฅ์ด๋ฆ„, qa/zeon ์ฒ˜๋Ÿผ ์ƒ์œ„๋ถ„์•ผ/ํ•˜์œ„๋ถ„์•ผ ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœํ• ๋•Œ ํฐ ๊ธฐ๋Šฅ์€ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ , ์ด์Šˆ๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ํ•ด๋‹น ์ด์Šˆ๋ฒˆํ˜ธ๋กœ ๊นƒ ์ปจ๋ฒค์…˜์„ ์ง€ํ‚ค๋ฉด์„œ ์ปค๋ฐ‹ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ• ๋•Œ ์„ค์ •ํ•œ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋ฉด, ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋ฅผ develop์œผ๋กœ mergeํ•˜๊ณ  ์‚ญ์ œํ•˜๋ฉด์„œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์ ์œผ๋กœ ๊ฐœ์„ ํ•ด์•ผํ•  ๋ฐฉํ–ฅ

์˜ต์ €๋ฒ„ ํŒจํ„ด โ†’ ์ด๋ฒคํŠธ ๋ฒ„์Šค ์ด์šฉ

ON & OFF๋Š” ๋‹ฌ๋ ฅ์„ ์ด์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ์ผ์ž๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด, setting ํ™”๋ฉด์„ ์ œ์™ธํ•œ ๋ชจ๋“  viewModel์— ์ ์šฉ๋˜์–ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค์ด๋‚˜๋ฏน ํ…Œ๋งˆ๋ฅผ ์ ์šฉํ•  ๊ณ„ํš์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์œ„ํ•œ ๊ณตํ†ต ์ƒํƒœ๋„ ํ•„์š”ํ–ˆ๊ตฌ์š”.

์ด์™€ ๊ฐ™์ด ๊ณตํ†ต์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผํ•  ์ƒํƒœ๋“ค์ด ๋ช‡๊ฐ€์ง€ ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋ฅผ ์œ„ํ•˜์—ฌ ์˜ต์ €๋ฒ„ ํŒจํ„ด์„ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ๊ฐœ์„ ๋ฐฉํ–ฅ-์˜ต์ €๋ฒ„ํŒจํ„ด

์˜ต์ €๋ฒ„ ํŒจํ„ด์˜ ๋ฌธ์ œ

  1. viewModel์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  viewModel์„ ๋Œ๋ฉด์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์•…ํ™”๋˜๋Š”๊ฒŒ ํ™•์—ฐํžˆ ๋ณด์˜€๊ณ , ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ์ž‘์—…์— ๋Œ€ํ•ด์„œ ๋” ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜๋ฐ–์— ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
  2. ๋˜ํ•œ, ๊ณตํ†ต ์ƒํƒœ์ธ uiState์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ viewModel์ด ์ค‘๋ณต์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ณด๋‹ˆ ์ด๋ฅผ ๋™๊ธฐํ™”ํ•ด์ฃผ๋Š” ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ๋งŽ์ด ํ•„์š”ํ–ˆ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ฐ viewModel์€ UiProvider์— ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ uiState๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ–ˆ๊ณ , viewModel์—์„œ๋„ ์ž‘์—…์„ ํ•˜๊ณ  ํ•ด๋‹น ์ž‘์—…์ด ์„ฑ๊ณตํ•˜๋ฉด UiProvider๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ณต์žกํ•œ ๋กœ์ง์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ ์ง€์•Š๊ฒŒ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  3. ํŠน์ • ํ™”๋ฉด์„ ์ดˆ๊ธฐํ™”ํ• ๋•Œ, uiState๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ uiProvider๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž‘์—…์„ ํ•ด์•ผํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— uiProvider๊ฐ€ ๊ณตํ†ต ์ƒํƒœ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ route ๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๋“ค๋„ ์•Œ๊ฒŒ๋˜์–ด ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์ด ๋งŽ์ด ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๋งŽ์€ ์„œ์นญ์„ ํ•ด๋ณธ ๊ฒฐ๊ณผ, ์•„์ง ์ ์šฉ์€ ์•ˆํ•ด๋ดค์ง€๋งŒ ์ด๋ฒคํŠธ ๋ฒ„์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ํ˜„์žฌ ์˜ต์ €๋ฒ„ ํŒจํ„ด์„ ์ด์šฉํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

event_bus_plus | Dart Package

  1. ์„ฑ๋Šฅ: pub/sub ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  viewModel์„ ์—…๋ฐ์ดํŠธํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ ์˜ต์ €๋ฒ„ ํŒจํ„ด์— ๋น„ํ•˜์—ฌ ์ด์ ์ด ์žˆ์„๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.
  2. uiState๋ฅผ ๊ฐ viewModel์ด ๊ฐ€์ง€๊ณ  ์žˆ์„ ํ•„์š”๊ฐ€ ์—†์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋ณต์‚ฌ๋ณธ์„ ์ค‘๋ณต์œผ๋กœ ๊ฐ€์ง์œผ๋กœ์จ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ์–ด ์ถ”ํ›„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ ์ ๊ทน์ ์œผ๋กœ ๋„์ž…์„ ๊ณ ๋ คํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์ ‘๊ทผ์„ฑ ๊ฐœ์„ 

ํ˜„์žฌ ON & OFF๋Š” ์ ‘๊ทผ์„ฑ์ด ๊ณ ๋ ค๋˜์ง€ ์•Š์€์ฑ„ ๊ฐœ๋ฐœ์ด ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹คํ–‰ํžˆ ๊ธ€์ž ํฌ๊ธฐ๋ฅผ ํ‚ค์šฐ๋Š” ์ˆ˜์ค€์˜ ๊ฒฝ์šฐ ๋ฉ”์ธ ๊ธฐ๋Šฅ๋“ค์˜ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ˆ˜์ค€์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์žฌ ON & OFF์—๋Š” ๊ธ€์ž ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์‹œ์Šคํ…œ ์„ค์ •์œผ๋กœ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ฑฐ๋‚˜, ์•„๋‹ˆ๋ฉด ๊ธ€์ž๊ฐ€ ์ผ๋ถ€ ์งค๋ ค๋ณด์ด๋Š” ๋“ฑ์˜ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ์ดˆ๊ธฐ์—๋Š” ์ ‘๊ทผ์„ฑ์ด๋ผ๋Š”๊ฒƒ์ด ์žˆ๋Š”์ง€๋„ ๋ชฐ๋ž๊ณ , ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ๋„ ๋ฐ”๋น ์„œ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœํ–ˆ๋˜ ๋ถ€๋ถ„์ด๋ผ์„œ ์ด์ ์€ ์ดํ›„ ํ”„๋กœ์ ํŠธ๋“ค์—๋Š” ๊ผญ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.