# MVC Pattern

# 1. MVC๋ž€?

MVC๋Š” Model-View-Controller ์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ํ•  ๋•Œ, 3๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ์—ญํ• ์„ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค.

๋น„์ง€๋‹ˆ์Šค ์ฒ˜๋ฆฌ ๋กœ์ง๊ณผ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋ฅผ ๋ถ„๋ฆฌ์‹œ์ผœ ์„œ๋กœ ์˜ํ–ฅ์—†์ด ๊ฐœ๋ฐœ ํ•˜๊ธฐ ์ˆ˜์›”ํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


# โน Model

Model์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด โ€œ๋ฌด์—‡โ€์„ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์—ญํ• ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์ฒ˜๋ฆฌ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜, DB์™€ ์ƒํ˜ธ์ž‘์šฉ(CRUD), ๋ฐ์ดํ„ฐ ๋“ฑ๋“ฑ ..

# โน Controller

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

# โน View

View๋Š” ํ™”๋ฉด์— "๋ฌด์—‡"์ธ๊ฐ€๋ฅผ "๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ์—ญํ• "์„ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ ํ•˜์œ„์— ์ข…์†๋˜์–ด, ๋ชจ๋ธ์ด๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ณด์—ฌ์ฃผ๋ ค๊ณ  ํ•˜๋Š” ๋ชจ๋“  ํ•„์š”ํ•œ ๊ฒƒ๋“ค์„ ๋ณด์—ฌ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฒŒ์— "๋ฌด์—‡"์„ ํ™”๋ฉด(UI)์œผ๋กœ ๋ณด์—ฌ์คŒ

๊ทธ๋ฆฌ๊ณ  Controller๋Š” Model๊ณผ View๊ฐ€ ๊ฐ๊ฐ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•  ์ง€๋ฅผ ์•Œ๊ณ  ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค. ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” Model๊ณผ ์™„์ „ํžˆ UI์— ์˜์กด์ ์ธ View๊ฐ€ ์„œ๋กœ ์ง์ ‘ ์ด์•ผ๊ธฐ ํ•  ์ˆ˜ ์—†๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

img

(โ–ฒ ์ถœ์ฒ˜ : Clint Jang (opens new window) MVC ๊ตฌ์กฐ)


# 2. MVC์˜ ํ•œ๊ณ„

MVC์—์„œ View๋Š” Controller์— ์—ฐ๊ฒฐ๋˜์–ด ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จ์œ„์š”์†Œ์ด๋ฏ€๋กœ ๋‹ค์ˆ˜์˜ View๋“ค์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Model์€ Controller๋ฅผ ํ†ตํ•ด์„œ View์™€ ์—ฐ๊ฒฐ๋˜์ง€๋งŒ, ์ด๋ ‡๊ฒŒ Controller๋ฅผ ํ†ตํ•ด์„œ ํ•˜๋‚˜์˜ View์— ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋Š” Model๋„ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ๋ทฐ์™€ ๋ชจ๋ธ์ด ์„œ๋กœ ์˜์กด์„ฑ์„ ๋„๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, ํ™”๋ฉด์— ๋ณต์žกํ•œ ํ™”๋ฉด๊ณผ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์„ฑ ํ•„์š”ํ•œ ๊ตฌ์„ฑ์ด๋ผ๋ฉด, Controller์— ๋‹ค์ˆ˜์˜ Model๊ณผ View๊ฐ€ ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

img

(โ–ฒ ์ถœ์ฒ˜ : Clint Jang (opens new window) MVC ํ•œ๊ณ„)

MVC๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ๋น„๋Œ€ํ•ด์ ธ์„œ, ์ƒˆ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ• ๋•Œ๋งˆ๋‹ค ํฌ๊ณ  ์ž‘์€ ๋ฌธ์ œ์ ์„ ๊ฐ€์ง€๊ณ  ์†Œ๋“œ ๋ถ„์„์ด๋‚˜ ํ…Œ์ŠคํŠธ๋„ ์–ด๋ ต์ฃ .

๐Ÿ’ก ์ด๋Ÿฐ ํ˜•ํƒœ์˜ MVC๋ฅผ
Massive ViewController (๋Œ€๊ทœ๋ชจ MVC ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜)
๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

MVC์˜ ํ•œ๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ ์šฉ์–ด ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค(๋‹น์—ฐํžˆ ์ €๋„ ํฌํ•จ)์€ MVC๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, View์™€ Model์„ ์ค‘์žฌํ•˜๋Š” Controller๋ฅผ ์ž‘์„ฑํ•˜๋ฉด Controller์˜ ๋น„์ค‘์ด ํฌ์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ๋ณต์žกํ•œ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด ๋Œ€๊ทœ๋ชจ MVC ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Controller๋Š” View์™€ ๋ผ์ดํ”„ ์‚ฌ์ดํด๊ณผ ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์„œ ๋ถ„๋ฆฌํ•  ์ˆ˜๋„ ์—†๊ณ , ์ฝ”๋“œ ๋ถ„์„/์ˆ˜์ •๊ณผ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ชจ๋‘ ํž˜๋“ค์–ด์ง€์ฃ . ๊ทธ๋ฆฌ๊ณ  ๋ณต์žกํ•˜๊ฒŒ ์—ฎ์–ด์žˆ๋Š” Model๊ณผ View๋Š” ์—ฌ๋Ÿฌ Side-Effect๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ํ”„๋กœ๊ทธ๋žจ ์šด์˜์„ ํž˜๋“ค๊ฒŒ ํ•˜์ง€์š”.

๊ทธ๋ž˜์„œ ์œ„์˜ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•œ ์—ฌ๋Ÿฌ ๋‹ค์–‘ํ•œ!! ํŒจํ„ด์„ ํŒŒ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก MVP, MVVM, Viper, Clean Architecture, Flux, Redux, RxMVVMโ€ฆ

ํŒŒ์ƒ๋œ ํŒจํ„ด๋“ค์€ ์‹œ๊ฐ„์ด ๋˜๋Š” ๋ฐ๋กœ ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๊ณ  ์ •๋ฆฌํ•˜๋ฉด ๊ธ€์„ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


# 3. MVC์˜ ์ž์„ธํ•œ ๊ฐœ๋…

# โน MVC ์šฉ์–ด ๋ถ„์„

# Model

Model represents an object or JAVA POJO carrying data. It can also have logic to update controller if its data changes.

๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด ๋˜๋Š” JAVA POJO์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋กœ์ง๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด 'ํ•™์ƒ'์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ set์— ๋Œ€ํ•ด ๋ชจ๋ธ์„ ๋งŒ๋“ ๋‹ค๋ฉด Student ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์™€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” ์ด์ •๋„ ๋˜๊ฒ ๋„ค์š”

  • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ : rollNo(ํ•™๋ฒˆ), name(ํ•™์ƒ ์ด๋ฆ„)
  • ๋ฉค๋ฒ„ ํ•จ์ˆ˜ : getRollNo, setRollNo, getName, setName

๋ณดํ†ต ํ•™๋ฒˆ, ํ•™์ƒ ์ด๋ฆ„๊ณผ ๊ฐ™์ด ๋ชจ๋ธ์—์„œ ๋‹ค๋ฃฐ๋งŒํ•œ ๋ฐ์ดํ„ฐ ๋“ค์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜์ฃ !

๊ทธ๋Ÿด ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉ ํ•˜๋ฉฐ CRUD ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ๋„ ๋ชจ๋ธ์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜(getter, setter ๋“ฑ)๋“ค์ด ์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค.


# View

View represents the visualization of the data that model contains.

๋ชจ๋ธ์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ์˜ ์‹œ๊ฐํ™”๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ '๋ชจ๋ธ์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ'๋ž€ ํ•™๋ฒˆ๊ณผ ํ•™์ƒ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค! ์ฆ‰ View๋Š” ํ•™๋ฒˆ๊ณผ ํ•™์ƒ ์ด๋ฆ„์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ƒ์—์„œ UI์— ์–ด๋–ป๊ฒŒ ๋‚˜ํƒ€๋‚ ์ง€์— ๊ด€๋ จ๋œ ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ ์ž…๋‹ˆ๋‹ค.

์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋ฉด HTML, Android ์•ฑ์ด๋ผ๋ฉด xml์ด ์ด ๋ถ€๋ถ„์˜ ํ‘œํ˜„์„ ๋‹ด๋‹นํ•˜๋Š” ์–ธ์–ด์ฃ . ์ฆ‰ ํ”„๋กœ์ ํŠธ์˜ View ํด๋”์—๋Š” ์›น ์•ฑ์ด๋ผ๋ฉด ์ฃผ๋กœ html, ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์ด๋ผ๋ฉด ์ฃผ๋กœ xml ํŒŒ์ผ๋“ค์ด ๋“ค์–ด ์žˆ์„ ๊ฑฐ์—์š”.


# Controller

Controller acts on both model and view. It controls the data flow into model object and updates the view whenever data changes. It keeps view and model separate.

์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ชจ๋ธ๊ณผ ๋ทฐ์— ์ „๋ถ€ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ ๊ฐ์ฒด๋กœ์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ œ์–ดํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ update ๋˜์—ˆ์„ ๋•Œ ๋ทฐ๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ทฐ์™€ ๋ชจ๋ธ์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด ์ปจํŠธ๋กค๋Ÿฌ, ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜!

์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ชจ๋ธ๊ณผ ๋ทฐ ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ญํ• ์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  interface ํ•จ์ˆ˜๋“ค์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด์ฃ .

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ญํ• ์€ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด์˜ ํ•จ์ˆ˜๋“ค์„ ์ž˜ ์‚ฌ์šฉํ•ด์„œ ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ UI์— ๋ณด์—ฌ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋˜๋Š” ๊ฒƒ์ด๊ฒ ์ฃ .

๊ทธ๋ฆฌ๊ณ  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋Š” ๋ง์˜ ์˜๋ฏธ๋Š”, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ์ž‘์—…์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ชจ๋ธ, ๋ทฐ ๊ฐ์ฒด๋Š” ๊ฑด๋“œ๋ฆด ํ•„์š” ์—†์ด ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด๋งŒ ๊ฐ€์ง€๊ณ  ๋†€๋ฉด ๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

์ด ๊ด€์ ์—์„œ ๊ณ„์† ๋ณธ๋‹ค๋ฉด, ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ถ”์ƒํ™”๊ฐ€ ํ•œ๋‹จ๊ณ„ ์ƒ๊ธฐ๋„ค์š”. ์ปจํŠธ๋กค๋Ÿฌ ์œ— ๋ ˆ๋ฒจ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฌผ๋ก ์ด๊ณ  ๋ชจ๋ธ๊ณผ ๋ทฐ์— ๋Œ€ํ•ด์„œ๋„ ์•Œ ํ•„์š”๊ฐ€ ์—†๊ณ  '์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด์˜ ์กฐ์ž‘๋ฒ•'๋งŒ ์•Œ๋ฉด ๋˜๋Š”๊ฑฐ์ฃ .

img

(โ–ฒ ์ถœ์ฒ˜ : hanee24 (opens new window) MVC ๋„์‹ํ™”)


# 5. ์˜ˆ์ œ

์ฝ”๋“œ ์ถœ์ฒ˜ : hanee (opens new window)

# (1) Model

Student.java

public class Student {
   private String rollNo;
   private String name;
   
   public String getRollNo() {
      return rollNo;
   }
   
   public void setRollNo(String rollNo) {
      this.rollNo = rollNo;
   }
   
   public String getName() {
      return name;
   }
   
   public void setName(String name) {
      this.name = name;
   }
}

# (2) View

StudentView.java

public class StudentView {
   public void printStudentDetails(String studentName, String studentRollNo){
      System.out.println("Student: ");
      System.out.println("Name: " + studentName);
      System.out.println("Roll No: " + studentRollNo);
   }
}

# (3) Controller

StudentController.java

public class StudentController {
   private Student model;
   private StudentView view;

   public StudentController(Student model, StudentView view){
      this.model = model;
      this.view = view;
   }

   public void setStudentName(String name){
      model.setName(name);    
   }

   public String getStudentName(){
      return model.getName();    
   }

   public void setStudentRollNo(String rollNo){
      model.setRollNo(rollNo);      
   }

   public String getStudentRollNo(){
      return model.getRollNo();     
   }

   public void updateView(){           
      view.printStudentDetails(model.getName(), model.getRollNo());
   }  
}

# 4. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ : ์ปจํŠธ๋กค๋Ÿฌ ์‚ฌ์šฉ

MVCPatternDemo.java

public class MVCPatternDemo {
   public static void main(String[] args) {

      //fetch student record based on his roll no from the database
      Student model  = retriveStudentFromDatabase();

      //Create a view : to write student details on console
      StudentView view = new StudentView();

      StudentController controller = new StudentController(model, view);

      controller.updateView();

      //update model data
      controller.setStudentName("John");

      controller.updateView();
   }

   private static Student retriveStudentFromDatabase(){
      Student student = new Student();
      student.setName("Robert");
      student.setRollNo("10");
      return student;
   }
}

# (5) Output

Student: 
Name: Robert
Roll No: 10
Student: 
Name: John
Roll No: 10

# 6. ๊ฒฐ๋ก 

MVC๋Š” Model-View-Controller์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœํ•  ๋•Œ 3๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค.

๊ทธ 3๊ฐ€์ง€ ์š”์†Œ๋ฅผ ์„ค๋ช…ํ•˜๋ฉด

Model์€ ๋ฌด์—‡์„ ํ• ์ง€ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์—์„œ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋ฐ์ดํ„ฐ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Controller๋Š” ์–ด๋–ป๊ฒŒ ํ• ์ง€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„์„œ ํ™”๋ฉด ์ฒ˜๋ฆฌ๊ธฐ๋Šฅ๊ณผ Model๊ณผ View๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

View๋Š” ๋ฌด์—‡์„ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•˜์ง€์š”. ์›น์ด๋ผ๋ฉด ์›นํŽ˜์ด์ง€, ๋ชจ๋ฐ”์ผ์ด๋ผ๋ฉด ์–ดํ”Œ์˜ ํ™”๋ฉด์˜ ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.


MVC๋Š” ๋ณต์žกํ•œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๋ฌธ์ œ์ ์ด ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์ˆ˜์˜ View์™€ Model์ด Controller๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Controller๊ฐ€ ๋šฑ๋šฑํ•ด์ง€๊ฒŒ ๋˜๋Š” **Massive ViewController(๋Œ€๊ทœ๋ชจ MVC ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜)**๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

View์™€ Controller๊ฐ€ ๋ผ์ด๋ธŒ์‚ฌ์ดํด์— ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๊ณ , ๋”๋ถˆ์–ด Controller๋ฅผ ํ†ตํ•ด View์™€ Model๊ฐ„์—๋„ ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์–ด์„œ ์ˆ˜์ •์‹œ ํ…Œ์ŠคํŠธ๊ฐ€ ํž˜๋“ค๊ณ , ํŒŒ์•…์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ Side-Effect๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ MVC๋Š” ์œ„ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํŽ˜๋Ÿฌ๋‹ค์ž„์„ ์ˆ˜์šฉํ•œ ๋‹ค์–‘ํ•œ ํŒจํ„ด์„ ํŒŒ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ์ด๋ฏธ์ง€๋กœ ํ‘œํ˜„ํ•˜๋ฉด

img

(โ–ฒ ์ถœ์ฒ˜ : Clint Jang (opens new window) MVC ๋„์‹ํ™”)

์™ผ์ชฝ์€ ํ•ต์‹ฌ๋งŒ, ์˜ค๋ฅธ์ชฝ์€ ๋‹ค๋ฅธ ํ•ด์„์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค.


# Reference

Last Updated: 6/18/2023, 2:13:15 PM