[Design Pattern] MVC pattern (Model View Controller)

2021. 1. 14. 01:10ใ†๐Ÿง‘๐Ÿป‍๐Ÿ’ป iOS ๊ฐœ๋ฐœ/iOS

ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์€ ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์ •๋ฆฌํ•œ ๊ฒƒ์œผ๋กœ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


MVC design pattern

MVC ๋””์ž์ธ์€ ๊ฐ€์žฅ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Model - View - Controller ์„ธ ๊ฐ€์ง€์˜ ํŒŒํŠธ๋กœ ๋‚˜๋ˆ„์–ด ๋‹ค๋ฃน๋‹ˆ๋‹ค. MVC ํŒจํ„ด์˜ ํ•ต์‹ฌ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ณด์—ฌ์ง€๋Š” ๋ ˆ์ด์–ด(UI)๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์‹œ๊ฐ์  ์š”์†Œ์™€ ๊ทธ ์ด๋ฉด์—์„œ ์‹คํ–‰๋˜๋Š” ๋กœ์ง์„ ์„œ๋กœ์˜ ์˜ํ–ฅ ์—†์ด ์‰ฝ๊ฒŒ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ๋” ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

Model (๋ชจ๋ธ)

๋ชจ๋ธ์€ ์ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฌด์Šจ ์ผ์„ ํ•˜๋Š”์ง€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋กœ์ง ๋“ฑ์ด ๋ชจ๋ธ์ด ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ ์•ˆ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ ์ง์ ‘ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… (Noticication or KVO: Key Value Observing) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™”๋ฅผ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

View (๋ทฐ)

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

Controller (์ปจํŠธ๋กค๋Ÿฌ)

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

M - V - C ๊ฐ„์˜ ์†Œํ†ต

  • ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ ๋ทฐ์™€ ๋ชจ๋ธ์€ ๋ฌด์กฐ๊ฑด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฑฐ์ณ์„œ ์†Œํ†ตํ•ฉ๋‹ˆ๋‹ค.

  • ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค.

  • ๋ทฐ์˜ ๊ฐ์ฒด๋“ค์€ ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•˜๊ณ  ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ์™€ ์†Œํ†ตํ•ฉ๋‹ˆ๋‹ค. 

MVC design pattern ์˜ ์žฅ์ 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฝ”๋“œ๋ฅผ ์„ธ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์— ๋งž์ถ”์–ด ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์‹œ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์ง€ ๋ณด์ˆ˜, ํ™•์žฅ์„ฑ, ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ ๋“ฑ์ด ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. 

MVC design pattern์˜ ํ•œ๊ณ„

๋ณดํ†ต ์ด๋Ÿฌํ•œ ์—ฌ๋Ÿฌ MVC๊ฐ€ ๋ชจ์—ฌ์„œ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋˜๋Š”๋ฐ ๋งŒ์•ฝ ํ™”๋ฉด ๊ตฌ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ์ด ๋ณต์žกํ•ด์งˆ ๊ฒฝ์šฐ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ์ปจํŠธ๋กค๋Ÿฌ์— ๋‹ค์ˆ˜์˜ ๋ชจ๋ธ๊ณผ ๋ทฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊น๋‹ˆ๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ๊ณผ ์ˆ˜์ •์ด ์ƒ๋‹นํžˆ ์–ด๋ ค์›Œ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


๋งˆ๋ฌด๋ฆฌ & Reference

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ Delgate , DataSource, KVO, noticification ๋ฐฉ์‹์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ๋” ์ž์„ธํžˆ ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.