Skip to content

Files

Latest commit

b4d5fb9 ยท Feb 24, 2022

History

History
159 lines (80 loc) ยท 6.17 KB

MVC_MVVM.md

File metadata and controls

159 lines (80 loc) ยท 6.17 KB

MVC, MVVM ํŒจํ„ด

MVC

MVVM


๋””์ž์ธ ํŒจํ„ด์ด๋ž€ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์–ด๋–ค ํŠน์ •ํ•œ ๊ฒƒ์„ ๊ฐœ๋ฐœํ•˜๋Š” ์ค‘์— ๋ฐœ์ƒํ–ˆ๋˜ ๋ฌธ์ œ์ ๋“ค์„ ์ •๋ฆฌํ•ด์„œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ ์šฉํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ •๋ฆฌํ•˜์—ฌ ํŠน์ •ํ•œ "๊ทœ์•ฝ"์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“  ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

MVC

Model-View-Controller

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ธ ๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ์—๊ฒŒ ๊ณ ์œ ํ•œ ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฐœ๋ฐœ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. MVC ํŒจํ„ด์„ ๋„์ž…ํ•˜๋ฉด ๋„๋ฉ”์ธ(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง) ์˜์—ญ๊ณผ UI ์˜์—ญ์ด ๋ถ„๋ฆฌ๋˜๋ฏ€๋กœ ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

IMAGES

Model

ํ”„๋กœ๊ทธ๋žจ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB), ์ƒ์ˆ˜, ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์€ ๋ณ€์ˆ˜๋“ค, ๋น„์ „ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด ์นด๋ฉ”๋ผ ์ •๋ณด์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์—๋Š” ๋ทฐ๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ •๋ณด๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€, ์ •๋ณด๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

View

ํ…์ŠคํŠธ๋ฐ•์Šค, ๋ผ๋ฒจ, ๋ฒ„ํŠผ ๋“ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(User interface) ์š”์†Œ๋“ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์–ดํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. ๋ทฐ์—์„œ๋Š” ๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ทฐ์—์„œ ์ž…๋ ฅ๋ฐ›๊ณ  ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Controller

๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ๊ด€์žฅํ•˜๋Š” ๋ธŒ๋ฆฟ์ง€(Bridge)์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ด๋ฒคํŠธ๋Š” ๋ทฐ์—์„œ ๋ฐœ์ƒํ•˜์ง€๋งŒ ๋‚ด๋ถ€ ์ฒ˜๋ฆฌ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ž…๋ ฅ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ด์— ๋Œ€ํ•œ ํ†ต์ง€๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

IMAGES

model 1์€ ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ๋ฅผ ๊ฐ™์ด ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋น ๋ฅด๊ณ  ์‰ฌ์šด ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ์˜ ์ฝ”๋“œ๊ฐ€ ์„ž์—ฌ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

model 2๋Š” ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๊ณ , ์ฝ”๋“œ๋ฅผ ์•Œ์•„๋ณด๊ธฐ ํž˜๋“ค๋‹ค๋Š” model 1์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ž‘์—… ์‹œ๊ฐ„์€ model 1๋ณด๋‹ค ๊ธธ์–ด์ง€์ง€๋งŒ, ์ถ”ํ›„์— ํ”„๋กœ๊ทธ๋žจ์ด ์ปค์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋Š” model 2 ๋ฐฉ์‹์ด ๋” ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


  • Process

    1. Controller๋กœ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด ๋“ค์–ด์˜จ๋‹ค.

    2. Controller๋Š” Model์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ๋ฐ ์ฝ์–ด์˜จ๋‹ค.

    3. Model์€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค„ View๋ฅผ ์„ ํƒํ•ด์„œ ํ™”๋ฉด์— ๋ณด์—ฌ์ค€๋‹ค.


MVC ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์งง๊ฒŒ ๋งํ•˜๋ฉด ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด์„œ ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” View, Model, ์ด๋ฅผ ์ œ์–ดํ•˜๋Š” Controller๋กœ ๊ฐ๊ฐ ๋ถ„๋ฆฌํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋ฉด, ์ค‘๋ณต๊ฐœ๋ฐœ๋˜๋Š” ๋ถ€๋ถ„์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ์‹œ ํšจ์œจ์„ฑ์ด ์ฆ๋Œ€๋  ๋ฟ ๋งŒ ์•„๋‹ˆ๋ผ, ์ถ”ํ›„ ํ”„๋กœ๊ทธ๋žจ์˜ ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์–ด๋– ํ•œ ๋ถ€๋ถ„์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์ตœ์†Œํ•œ์˜ ์˜ํ–ฅ์„ ์ฃผ๋ฉฐ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‹จ์ 

Controller๊ฐ€ Model๊ณผ View์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋А์„ ๊นŒ์ง€๋Š” ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํ”„๋กœ๊ทธ๋žจ์ด ๋ณต์žกํ•˜๊ณ  ๋ฌด๊ฑฐ์šด ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Controller์—์„œ ์—…๋ฌด๊ฐ€ ๊ณผ์ค‘๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋„๋ก ์„ค๊ณ„ํ•œ ๋ชจ๋ธ์ด์ง€๋งŒ ์ผ์ • ์ˆ˜์ค€์ด์ƒ์˜ ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ˆ˜์ •์‹œ ํ…Œ์ŠคํŠธ๊ฐ€ ํž˜๋“ค๊ณ  ํ•˜๋‚˜์˜ ์ˆ˜์ •์ด ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋“ฑ ์—ญํšจ๊ณผ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ๊ณ„

๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ์ ์ด๋‹ค. ์ด๋Š” ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ , ์„ค๊ณ„์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋Š” ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค. -> MVVM, MVP ๋“ฑ์˜ ๋“ฑ์žฅ


MVVM

Model-View-ViewModel

IMAGES

Model

์•ž์„œ ๋งํ•œ MVC ๋ชจ๋ธ๊ณผ ์—ญํ• ์ด ๊ฐ™์Šต๋‹ˆ๋‹ค.

View

ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ, ์•ก์…˜์€ View๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์•ก์…˜์— ๋”ฐ๋ผ ViewModel์— ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. DataBinding์œผ๋กœ ViewModel์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

ViewModel

View๋งŒ์„ ์œ„ํ•ด ์ •์ œ๋œ, ๊ฐ€๊ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” Model์ž…๋‹ˆ๋‹ค. ์™ธ๋ถ€์—์„œ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ๋ช…๋ น์„ ๋ฐ›์œผ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณต, ์ฒ˜๋ฆฌํ•˜์—ฌ Model๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์–ด์˜ต๋‹ˆ๋‹ค. ์–ป์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๊ฐ€๊ณตํ•˜์—ฌ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


  • Process

    1. View์— ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด Command ํŒจํ„ด์œผ๋กœ ViewModel์— ๋ช…๋ นํ•จ.

    2. ViewModel์€ Model์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์š”์ฒญ.

    3. Model์€ ViewModel์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์‘๋‹ต.

    4. ViewModel์€ ์‘๋‹ต๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•ด์„œ ์ €์žฅ.

    5. View๋Š” ViewModel๊ณผ Data Binding์œผ๋กœ ์ธํ•ด ์ž๋™์œผ๋กœ ๊ฐฑ์‹ .


MVVM ๋ชจ๋ธ์˜ ํ•ต์‹ฌ์€ DataBinding์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ MVC์™€๋Š” ๋‹ค๋ฅด๊ฒŒ View๊ฐ€ ์ง์ ‘ ViewModel๋กœ๋ถ€ํ„ฐ DataBinding์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

  • DataBinding: ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ View์— ๋ฉ”์„œ๋“œ๋กœ ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋งŒ ๋ณ€๊ฒฝํ•ด๋„ ์ž๋™์œผ๋กœ View์— ๋ฐ˜์˜์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ๋Š” ๊ฒƒ.

์žฅ์ 

Model์— ์˜์กด์„ฑ์ด ์—†๋Š” View, View์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ฒ ์ €ํ•œ ๋ถ„๋ฆฌ.

ํ…Œ์ŠคํŠธ๊ฐ€ ์ˆ˜์›”ํ•ด์ง„๋‹ค. (์˜์กด์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ)

๋ทฐ์™€ ๋ทฐ๋ชจ๋ธ์ด 1:n ๊ด€๊ณ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต๋˜๋Š” ๋กœ์ง์„ ๋ชจ๋“ˆํ™” ํ•ด์„œ ์—ฌ๋Ÿฌ ๋ทฐ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

๋‹จ์ 

์„ค๊ณ„ํ•˜๊ธฐ๊ฐ€ ๋ณต์žกํ•˜๋‹ค. (๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•œ ์ง€์‹ ํ•„์š”)

๋ทฐ๋ชจ๋ธ์ด ๋น„๋Œ€ํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ๊ฐ€ ์‹ฌํ•˜๋‹ค.


๐Ÿ“š ์ฐธ๊ณ 

MVC 1

MVC 2

MVC/MVVM 1

MVC/MVVM 2


Summary



โ‰๏ธ ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

  1. MVC ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ๋‚˜์š”?
  1. MVC ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ์ ์€ ์—†๋‚˜์š”?
  1. MVC ํŒจํ„ด์˜ ๋ฌธ์ œ์ ์„ ์–ด๋–ค์‹์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?