Skip to content

warrenth/MVI-Pattern

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

๐Ÿงช MVI ํ…Œ์ŠคํŠธ์šฉ ํ”„๋กœ์ ํŠธ

์ด ํ”„๋กœ์ ํŠธ๋Š” ์ตœ๊ทผ Jetpack Compose์—๋Š” MVI๏ฟฝ๏ฟฝ ๋” ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ์ ํ•ฉํ•˜๋‹ค๋Š” ์˜๊ฒฌ์ด ๋งŽ์•„์ง€๋Š” ํ๋ฆ„ ์†์—์„œ,
๊ณผ์—ฐ ๊ทธ ์ฃผ์žฅ์ด ํ•ญ์ƒ ๋งž๋Š”์ง€ ์ง์ ‘ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•ด๋ณด๊ธฐ ์œ„ํ•ด ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ MVI๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐ ๊ทธ์น˜์ง€ ์•Š๊ณ ,
MVVM(๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„ ๊ธฐ๋ฐ˜)๊ณผ ๋น„๊ตํ•ด ํ™•์žฅ์„ฑ, ๋ณต์žก๋„, ํ˜‘์—… ์ธก๋ฉด์—์„œ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

๐Ÿ” MVI๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

**MVI (Model - View - Intent)**๋Š” UI ์ƒํƒœ๋ฅผ ๋‹จ์ผ ๊ฐ์ฒด(State)๋กœ ์ •์˜ํ•˜๊ณ ,
์‚ฌ์šฉ์ž์˜ ์ธํ„ฐ๋ž™์…˜์„ ๋ช…์‹œ์ ์ธ Event(Intent)๋กœ ์ „๋‹ฌํ•˜๋ฉฐ,
์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด State์™€ ์ผํšŒ์„ฑ Effect๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค.

User Action โ†’ Event(Intent) โ†’ ViewModel โ†’ State / Effect โ†’ View

๐Ÿ’ฌ MVVM๊ณผ ์ฐจ์ด? ๊ทธ๋ฆฌ๊ณ  ์• ๋งคํ•œ ์ง„์‹ค

๋Œ€๋ถ€๋ถ„์˜ MVVM ๊ธฐ๋ฐ˜ Android ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์‹ค์ œ๋กœ๋Š”
์–‘๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ ์—†์ด ๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„์œผ๋กœ ViewModel์„ ํ˜ธ์ถœํ•˜๊ณ ,
LiveData ๋˜๋Š” StateFlow๋กœ ์ƒํƒœ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๋ฐฉ์‹์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, MVVM์ด๋ผ๊ณ  ๋ถ€๋ฅด์ง€๋งŒ, ๊ตฌ์กฐ์ ์œผ๋กœ๋Š” MVI์™€ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋กœ ์“ฐ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ ํŒจํ„ด์€ MVI์™€ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค:

viewModel.onEvent(SomeUiEvent)           // MVI์˜ Intent์™€ ์œ ์‚ฌ
viewModel.uiState.collectAsState()       // MVI์˜ State ๊ตฌ๋…๊ณผ ๋™์ผ

๊ฒฐ๊ตญ ๋ช…์‹œ์ ์œผ๋กœ Intent / State / Effect๋ฅผ ๋‚˜๋ˆ„๋Š”๊ฐ€, ์•„๋‹ˆ๋ฉด ๊ทธ๊ฑธ ViewModel ๋‚ด์—์„œ ๋ฌถ์–ด์„œ MVVM ํ˜•ํƒœ๋กœ ์“ฐ๋Š”๊ฐ€์˜ ์ฐจ์ด์ž…๋‹ˆ๋‹ค.

โ“ ๊ทธ๋ž˜์„œ ์–ด๋–ค ๊ฑธ ํƒํ•ด์•ผ ํ•˜๋‚˜์š”?

์ด๋ฆ„์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๊ณ  ์—ญํ• ์„ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์€ ํŒ€ ๋‹จ์œ„ ํ˜‘์—…์ด๋‚˜ ์œ ์ง€๋ณด์ˆ˜์— ์žˆ์–ด ๋ช…ํ™•ํ•œ ์ด์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ MVI๋Š” ๊ตฌ์กฐ์  ๋ช…ํ™•์„ฑ์˜ ๋Œ€๊ฐ€๋กœ ๋ณด์ผ๋Ÿฌ๏ฟฝ๏ฟฝ๋ ˆ์ดํŠธ๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ ,
๋‹จ์ˆœํ•œ ํ™”๋ฉด์—์„œ๋Š” ์˜คํžˆ๋ ค ๊ณผ๋„ํ•œ ์„ค๊ณ„๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘‰ ๊ฒฐ๊ตญ ์ค‘์š”ํ•œ ๊ฑด ํ™”๋ฉด์˜ ๋ณต์žก๋„์™€ ํŒ€์˜ ํ•ฉ์˜ ์ˆ˜์ค€์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์•„ํ‚คํ…์ฒ˜๋Š” ๋„๊ตฌ์ผ ๋ฟ, ์ •๋‹ต์€ ์—†์Šต๋‹ˆ๋‹ค.

About

Compose, MVI

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages