MVC์™€ MVVM

seoยท2022๋…„ 1์›” 19์ผ
1

MVC ํŒจํ„ด

๐Ÿ’ก ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ๊ฐ์˜ ์—ญํ• ์— ๋”ฐ๋ผ Model, View, Controller๋กœ ๋‚˜๋ˆ„์–ด ์„ค๊ณ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด๋‹ค.
์†Œํ”„ํŠธ์›จ์–ด์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํ™”๋ฉด์„ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ "๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ" ๋Š” ๋”๋‚˜์€ ์—…๋ฌด์˜ ๋ถ„๋ฆฌ์™€ ํ–ฅ์ƒ๋œ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Model

โœ”๏ธํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ, ํ…Œ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง ๋‹ด๋‹น

  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ๊ณ , ์ด ์ •๋ณด๋“ค์„ ๊ฐ€๊ณต ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด ๋ณ€๊ฒฝ ํ†ต์ง€์— ๋Œ€ํ•œ ๋กœ์ง๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผํ•œ๋‹ค. (์ง์ ‘์ ์ธ UI ๋ณ€๊ฒฝ X)
  • ๋ชจ๋ธ์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ทฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•œ๋‹ค.

View

โœ”๏ธ๋ ˆ์ด์•„์›ƒ๊ณผ ํ™”๋ฉด์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ๋‹ค.

  • ๋ทฐ๋Š” ํ•ญ๋ชฉ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋ฉฐ, ํ‘œ์‹œํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š”๋‹ค.
  • ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•œ๋‹ค.

Controller

โœ”๏ธ์ž…๋ ฅ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋ชจ๋ธ ๋ฐ/๋˜๋Š” ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋กœ์ง์„ ํฌํ•จํ•œ๋‹ค.

  • Model๊ณผ View ์‚ฌ์ด์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์‹ค์ œ ์—…๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” Model์„ ํ˜ธ์ถœํ•œ๋‹ค.
  • Model์ด ์—…๋ฌด ์ˆ˜ํ–‰์„ ์™„๋ฃŒํ•˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ํ™”๋ฉด์„ ์ƒ์„ฑํ•˜๋„๋ก View์— ์ „๋‹ฌํ•œ๋‹ค.
  • ์ฆ‰, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•ด Model๊ณผ View๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ ์ „๋‹ฌํ•˜๋Š” ์ค‘์žฌ์ž ์—ญํ• ์„ ํ•œ๋‹ค.
  • ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ์„ ์—…๋ฐ์ดํŠธ ํ•˜์ง€ ์•Š๊ณ  ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    ex) ํ•ญ๋ชฉ์„ ์•ŒํŒŒ๋ฒณ์ˆœ์„œ๋กœ ์ •๋ ฌํ•œ๋‹ค๊ฑฐ๋‚˜, ๊ฐ€๊ฒฉ์ด ๋‚ฎ์€ ์ˆœ์„œ ๋˜๋Š” ๋†’์€ ์ˆœ์„œ๋กœ ์ •๋ ฌ
  • ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์ธ Model๊ณผ View๊ฐ€ ๋ฌด์—‡์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋‹ค.

๋™์ž‘ ์˜ˆ์‹œ

  1. ์‚ฌ์šฉ์ž์˜ Action์€ View๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜จ๋‹ค.
  2. ์‚ฌ์šฉ์ž์˜ Action๋“ค์€ Controller์— ๋“ค์–ด์˜จ๋‹ค.
  3. Controller๋Š” ์‚ฌ์šฉ์ž์˜ Action๋ฅผ ํ™•์ธํ•˜๊ณ , Model์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
  4. Controller๋Š” Model์„ ๋‚˜ํƒ€๋‚ด์ค„ View๋ฅผ ์„ ํƒํ•œ๋‹ค.
  5. View๋Š” Model์„ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. (Controller๋ฅผ ์ด์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.)

์ถœ์ฒ˜: https://beomy.tistory.com/43 [beomy]

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

  • ์ž˜ ์ •๋ฆฌ๋œ ์ฝ”๋“œ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ
  • MVC๊ฐ€ ํ˜ผ์žฌ๋˜์–ด ์žˆ๋Š” ์ฝ”๋“œ ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๋ณด๋‹ค ์œ ์ง€๋ณด์ˆ˜, ํ™•์žฅ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๋‹ค.

MVC๋ชจ๋ธ์˜ ํ•œ๊ณ„

  • ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ์„ค๊ณ„๋ฅผ ์œ„ํ•ด ๋งŽ์€ ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•  ์ˆ˜ ์žˆ๋‹ค.
  • View์™€ Model์˜ ์˜์กด์„ฑ์„ ์™„๋ฒฝํžˆ ๋ถ„๋ฆฌ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํŒจํ„ด์ด ๋ชจํ˜ธํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • View์™€ Model์˜ ๋†’์€ ์˜์กด์„ฑ์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปค์งˆ์ˆ˜๋ก ๋ณต์žกํ•ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค.
    ๋Œ€๊ทœ๋ชจ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•  ๊ฒฝ์šฐ ๋‹ค์ˆ˜์˜ View์™€ Model์ด Controller๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค.
    Controller๋ฅผ ํ†ตํ•ด View์™€ Model๊ฐ„์—๋„ ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์–ด ๋ณต์žกํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋” ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • Model๊ณผ View Controller๊ฐ€ ๋Š์Šจํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋”๋ผ๋„ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด View์™€ Controller์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋„ ์ˆ˜ํ–‰ํ•ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.
    โ—๏ธ ์œ„ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋””์ž์ธ ํŒจํ„ด์„ ํŒŒ์ƒ์‹œ์ผฐ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ MVVM ํŒจํ„ด์ด๋‹ค.

MVVM ํŒจํ„ด

๐Ÿ’ก MVVM์€ MVC๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด๋‹ค. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ๊ฐœ๋ฐœ์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค. View์™€ ๋‹ค๋ฅธ ๊ณ„์ธต๊ฐ„์˜ ์ž‘์—…์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ ์–ธ์  ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค. MVC์™€ MVVM์˜ ๊ฒฐ์ •์ ์ธ ์ฐจ์ด๋Š” ViewModel์ด๋‹ค.

View์™€ Model์€ MVCํŒจํ„ด๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค.

ViewModel

  • ๋ทฐ์™€ ๊ด€๋ จ ๋ชจ๋ธ ์‚ฌ์ด์˜ ๋ณ€ํ™”๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋ทฐ์˜ ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์ด๋‹ค.
  • Command ํŒจํ„ด๊ณผ Data Binding์„ ์ด์šฉํ•˜์—ฌ View์™€ View Model ์‚ฌ์ด์˜ ์˜์กด์„ฑ์„ ์—†์•ด๋‹ค.
    Command ํŒจํ„ด: ๋ทฐ์—์„œ UI๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ทฐ ๋ชจ๋ธ์— ์ „๋‹ฌํ•˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์„ ์บก์Šํ™”ํ•œ ๊ฒƒ
    Data Binding: ๋ทฐ์™€ ๋ทฐ ๋ชจ๋ธ ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”์‹œํ‚ค๋Š” ๊ฒƒ
  • Controller์™€ ๋‹ฌ๋ฆฌ ์ด๋ฒคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

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

  • UI๊ฐ€ ์‹ค์ œ ์ฝ”๋“œ์™€ ๊ฑฐ์˜ ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋œ ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. ๋•๋ถ„์— ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋กœ์ง๊ณผ UI ๋””์ž์ธ ๊ฐ„ ์ƒํ˜ธ ์˜ํ–ฅ์ด ์ ์–ด ๊ฐœ๋ฐœ์ด ์šฉ์ดํ•˜๋‹ค.
  • ๊ฐœ๋ฐœ์ž์™€ UI ๋””์ž์ด๋„ˆ ๊ฐ„์˜ ํ˜‘์—…์ด ์šฉ์ดํ•˜๋‹ค.
  • MVVM์€ ๋””์ž์ธ๊ณผ ๊ทธ ๋™์ž‘๊นŒ์ง€ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ ๋ฆฌํ•˜๋‹ค.

MVVM ํŒจํ„ด์˜ ํ•œ๊ณ„

  • Binding ๊ธฐ์ˆ ๋“ฑ์ด ํ”„๋ ˆ์ž„์›Œํฌ ํŠนํ™”์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ์˜ ์žฌ์‚ฌ์šฉ์€ ์–ด๋ ต๋‹ค.
  • View Model์˜ ์„ค๊ณ„๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค.

์ฐธ๊ณ : https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC
https://medium.com/@jang.wangsu/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-1d74fac6e256
https://beomy.tistory.com/43
https://tomyrhymond.wordpress.com/2011/09/16/mvc-mvp-and-mvvm/

0๊ฐœ์˜ ๋Œ“๊ธ€