๐ย MVC Pattern(Model-View-Controller)

Model+View+Controller๊ตฌ์กฐ์ ์ํคํ ์ฒ ํจํด
- ํ๋์
View๋ ํ๋์ mvc๋ก ์ ์ด MVC์MVC๊ฐ ์ํตํ ๋ ๋ค๋ฅธMVC๋ ํญ์ ์์ ์View๋ก ์ทจ๊ธ
์ฆ, ์ด๋คMVC๋ ๋ค๋ฅธMVC์View๊ฐ ๋ ์ ์์
๐Model
์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋น
View์ ๋ํด์ ๋ชฐ๋ผ ๊ทธ๋ฅ ๋ฐ์ดํฐ๋ง ๊ด๋ฆฌํ๋ ๊ฐ์ฒด โ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ๊ทธ์ ๋ง์ถฐ ์ ์ฅํ ํํ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ค์, UI์์ ์ด๋ป๊ฒ ๋ณด์ผ์ง๋ ์ ๊ฒฝ์ฐ์ง ์์(Person์ด๋ผ๋ ๊ตฌ์กฐ์ฒด์ ์์ผ์ ์ ์ฅํ๋ ๊ฒ์ OK, ๋ฌธ์์ด์ ์ด๋ค ์์ผ๋ก ํ์ฑํด ์ด๋ค ์์ผ๋ก ํ๋ฉด์ ๋์ธ์ง๋ NO)
- ๋ฐ์ดํฐ๋ก ์ฌ์ฉํ๋ ๊ตฌ์กฐ์ฒด(์๋ก์ด ๋ฐ์ดํฐ ์ถ๊ฐ/๊ธฐ์กด ๋ฐ์ดํฐ ์ ๋ณด ์ ๋ฐ์ดํธ/ํน์ ๋ฐ์ดํฐ ์ ๋ณด ์ป๊ธฐ)
- ๋คํธ์ํฌ ๋ก์ง : ๋คํธ์ํฌ ์์ฒญ์ ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ค๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ๋ด์ ๋คํธ์ํฌ ๋ก์ง
- ๋ฐ์ดํฐ ํ์ฑ : JSON ๋ฑ์ ๋ฐ์ดํฐ๊ฐ ์์ ๋ ํ์ฑํ๋ ๋ก์ง
- Manager ๊ฐ์ฒด : ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค์ด๋๊ณ ํ์ํ ๊ฒฝ์ฐ ์ด๋์๋ ์ ๊ทผํด ์ฌ์ฉํ ์ ์๋๋ก Manager๋ฅผ ๋ฐ๋ก ๋ง๋๋ ๊ฒฝ์ฐ
๐View
์ฌ์ฉ์ ํ๋ฉด ํ์(UI) ๋ฅผ ๋ด๋น
- ์ง์ ์ ์ ์ ์ํธ์์ฉ
- ์ฌ์ฌ์ฉ์ฑ์ด ๊ฐ์กฐ
- ํ๋ฉด ํ์์๋ง ๊ด์ฌ ์์ด
Model์ ๋ํด์ ๋ชฐ๋ผ
UIView๋ฅผ ์์ํด ๋ง๋ค์ด์ง ์๋ธํด๋์ค- Core Animation
- Core Graphics
๐Controller
Model๊ณผView์ ์ค์ฌ์ ์ญํ ์ ๋ด๋น
- ์ฑ์ ํต์ฌ ๋ก์ง์ ๋ด๊ณ ์๋ ๊ณ์ธต(๋ชจ๋ธ์ ๋ ์ด ํจ์ ์คํํด, ๋ทฐ์ผ ๋ ํ๋ฉด ์ด๋ ๊ฒ ๋ฐ๊ฟ)
Model์ ์ ๋ณด๋ฅผ ํด์ํ๊ณ ๊ตฌ์ฑํด์View๋ฅผ ์ด๋ป๊ฒ ์ ๋ฐ์ดํธ๋ฅผ ํด์ผ ํ๋์ง๋ฅผ ์๋ ค์คView์์์ ์ฌ์ฉ์์์ ์ํธ์์ฉ์ ํด์ํดModel์ด ์ด๋ค ์์ ์ ํด์ผ ํ๋์ง๋ฅผ ์๋ ค์ค
๐Apple์ MVC
View Controller๊ฐView์Controller์ ์ญํ ์ ๋ชจ๋ ์ํ ์ฆ,View Controller๊ฐView์Controller๋ฅผ ๊ด๋ฆฌํ๊ณ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ
๐MVC Pattern์์ ๊ฐ ์์ญ์ด ๋ํํ๋ ๋ฐฉ๋ฒ
๐Controller โ Model/View
Model์ ์ง์ ์ ๊ทผ ๊ฐ๋ฅView์ ๋ํด์ ์ง์ ์ ๊ทผ ๊ฐ๋ฅ(outlet)
๐View โ Controller
- target-action ๊ตฌ์กฐ๋ก ์ฌ์ฉ์์ ํ์(in
View)์ ๋ฐ๋ผ ํ์ํ ํจ์๋ฅผ ํธ์ถ(inController) - delegate, datasource๋ฅผ ํตํด ๋ฏธ๋ฆฌ ์ ํด์ง ๋ฐฉ์์ ์์ฒญ์ ์ํ
๐Model โ Controller (directly : NO indirectly : YES)
ModelUI(View)์ ๋ ๋ฆฝ์ ์ด๊ณ ,Controller๋ ๊ทผ๋ณธ์ ์ผ๋ก UI(View)์ ์ข ์๋์ด ์๊ธฐ ๋๋ฌธ์์ง์ ์ ์ผ๋ก ์ํธ์์ฉํ์ง ์๊ณController๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์ํธ์์ฉ
Model์ดNotification์ ์ด์ฉํด ๋ฌด์ธ๊ฐ ๋ณํํ๋ค๋ ์ ํธ๋ฅผ ๋ณด๋ด๋๋ฉด, ๋์ค์Controller๊ฐ ๊ทธ ์๋ฆผ์ ๋ณด๊ณ ๋ค์Model์ ์ ๊ทผํด ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ดModel์ ์๋ ํ๋กํผํฐ์Controller๊ฐ KVO(Key-Value Observing)์ ์ด์ฉํด ๊ทธ ํ๋กํผํฐ์ ๋ณํ๋ฅผ ๊ฐ์งํด ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ด โModel์ ์ด๋ฏธ ์๋ ค์ ธ์๋ ์ฃผํ์๋ก ๋ฐฉ์ก,Controller๋ ๊ทธ ์ฃผํ์์ ๋ง์ถ๊ณ ์๋ค๊ฐ ๋ชจ๋ธ์ ๋ฐฉ์ก์ ๋ฌ๋ผ์ง ๊ฒ ์์ผ๋ฉดController๊ฐModel์๊ฒ ๊ฐ์ ๋ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์(like radio)
๐MVC Pattern์ ์ฅ์
- ์๋ก ์ญํ ์ ๋๋์ด์ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ ์ฑ์ด ์ข์
- ์ ๊ทผ์ด ์ฌ์ ์ ์ง๋ณด์๊ฐ ์ฉ์ด
- ๊ฐ๋ฐ ์๋๊ฐ ๋นจ๋ผ ๊ท๋ชจ๊ฐ ์์ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๊ธฐ ์ข์
๐MVC Pattern์ ๋จ์
View์Controller๊ฐ ๋๋ฌด ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ โ ๋๋ถ๋ถ์ ์ฝ๋๊ฐController์ ๋ฐ์ง๋ ์ ์์- ํ๋ก์ ํธ๊ฐ ์ปค์ง์๋ก ์ ์ง๋ณด์๊ฐ ํ๋ฆ