Design Patterns #Section01 MVC(01) - Model, View, Controller
- ๐๏ธ Introduce
- ๐ฑ MVC ๊ฐ์ฒด์ 3๊ฐ์ง ํ์ ๊ณผ ์ฐ๊ด๊ด๊ณ
- ๐ฑ Cocoa Controller (Objective-C ๊ณต๋ฌธ ์ฐธ์กฐ.. ์๋ ๊บผ๋ผ ์ ํํ์ง ํ์ ์์)
๐ MVC(01) - Model, View, Controller
๐๏ธ Introduce
์ ํ์ iOS ํ๋ก๊ทธ๋๋ฐ์ ์ฒ์ ์ ํ์ ๋ Cocoa MVC ๋์์ธ ํจํด์ ๋ํด ๊ฐ์ฅ ๋จผ์ ๋ค์๋ ๋ง์ Massive View Controller์๋ค.
๊ทธ ๋น์ ๋์์ธํจํด์ ๋ํ ๊ฒฌํด๊ฐ ๋์ง ์์ ๊ตณ์ด ๊ตฌ์? ๋์์ธ ํจํด์ ๊ณต๋ถํ ํ์๊ฐ ์๋ ์ถ์๋ ํ์๋ Cocoa MVC๋ฅผ ์ํธ ์ด์ฉํ ์ ์๋ MVVM ํจํด์ ๋จผ์ ์ตํ๊ณ ๋ค์ํ ํ๋ก์ ํธ์ ์ ์ฉํด์๋ค.(๋ฌผ๋ก MVVM๋ ์จ๋ณด๊ธฐ๋ง ํ์ง ๊น๊ฒ๋ ๋ชจ๋ฆ..)
ํ์ง๋ง Cocoa MVC๋ ์์ฐํ Apple์ด iOS ํ๋ก๊ทธ๋๋ฐ์ ์ฑํํ ๋์์ธ ํจํด์ธ๋ค.(Apple๋ Massive View Controller๋ฅผ ์ธ์ ํ๊ธด ํจ..)
๋ฐ๋ผ์ ํด๋น ์น์
์ ํตํด iOS ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ธ Cocoa MVC ๋์์ธ ํจํด์ ๋ํ ๊ฒฌ๋ฌธ์ ๋ํ๊ณ , ์์ผ๋ก ํ์์ ๊ฐ๋ฐ ์ธ์์์ Cocoa MVC๋ฅผ ์ ์ฉํ์ง ์๋ ๋ช
๋ฐฑํ ์ด์ ๋ฅผ ์๋ฆฝํ๊ณ ์ ์์ฑํ๋ค.
๐ฑ MVC ๊ฐ์ฒด์ 3๊ฐ์ง ํ์ ๊ณผ ์ฐ๊ด๊ด๊ณ
Cocoa MVC ํจํด์ ์์๋ณด๊ธฐ ์์ MVC ๋์์ธ ํจํด์ ๊ตฌ์ฑํ๋ ๊ฐ์ฒด ํ์
์ ๋ํด ์์๋ณด๋๋ก ํ๋ค.
MVC ๋์์ธ ํจํด์ ์ด 3๊ฐ์ ๊ฐ์ฒด ํ์
์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๊ทธ ์ข
๋ฅ๋ก๋ Model, View, Controller ์ธ ๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
์ธ ๊ฐ์ง ๊ฐ์ฒด๋ ๊ฐ๊ฐ ์ถ์์ ๊ฒฝ๊ณ๋ก ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ถ๋ฆฌ๋์ด ์์ผ๋ฉฐ, ์ด๋ฌํ ๊ฒฝ๊ณ๋ฅผ ํตํด ๋ค๋ฅธ ์ ํ์ ๊ฐ์ฒด์ ์ํธ์์ฉ ํ๋ค.
Model
Model ๊ฐ์ฒด๋ฅผ ํ ๋ง๋๋ก ํํํ์๋ฉด โ์ฑ์ ์์ดํ ํฐํฐโ์ด๋ค.
- Model ๊ฐ์ฒด์๋ Data ๋๋ DB์ ์์นํ ์ธ์คํด์ค๋ฅผ ์๋ฒ๋ก ๋ถํฐ Requestํ๊ธฐ ์ํ ๋คํธ์ํฌ ํต์ ๋ก์ง์ด ๋ด๊ธฐ๋ฉฐ, MVC ๊ธฐ๋ฐ์ผ๋ก ์ ์ค๊ณ๋ App์ ๋ชจ๋ Data๋ฅผ Model ๊ฐ์ฒด์ ์บก์ํ ํ ์ ์๋ค.
- Model ๊ฐ์ฒด๋ Data๋ฅผ ํ์ฉํด App์์ ์ ๊ณตํ๊ณ ์ ํ๋ ๋น์ฆ๋์ค(๋น์ฆ๋์ค ๋ก์ง)์ด ๋ด๋ฉฐ, ํน์ ๋๋ฉ์ธ์ ๊ด๋ จ๋ Data๋ฅผ ํํํ๊ธฐ ์ํด ์ฌ์ฌ์ฉ์ฑ์ด ํ๋ณด๋๋ ๊ฒฝํฅ์ด ์๋ค.
- Model์ Interface๋ Presentation ๊ณ์ธต์ ์ํ ๊ฐ์ฒด์๋ ๋ช ์์ ์ธ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ฑ๋ฆฝํ ์ ์๋ค.
View
View ๊ฐ์ฒด๋ Model ๊ฐ์ฒด์ ํ๋กํผํฐ(Data)๋ฅผ ์ด๋ป๊ฒ Interface์ ํํํ ์ง ์ ์ํ๋ ์ฝ๋๊ฐ ๋ด๊ธด๋ค.
๊ทธ๋ฌ๋ฏ๋ก Model ๊ฐ์ฒด์์ ๋ณ๊ฒฝ๋๋ Data ๊ฐ์ View ๊ฐ์ฒด์์ ์์์ผ ํ ๋ช
๋ถ์ด ํ์ํ๋ค.
ํ์ง๋ง Model ๊ฐ์ฒด๊ฐ ํน์ View ๊ฐ์ฒด์ ์ง์ ์ ์ธ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ฑ๋ฆฝํ์ง ์์ผ๋ฏ๋ก, Model ๊ฐ์ฒด์ ๋ณ๊ฒฝ ์ฌํญ์ View ๊ฐ์ฒด์ ์๋ฆฌ๊ธฐ ์ํ ๋ณ๋์ ๋ฐฉ๋ฒ์ด View ๊ฐ์ฒด์ ํ์ํ๋ค.
- View ๊ฐ์ฒด๋ Data๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋ํ ์ฑ ์์ด ์์ด์ผํ๋ฉฐ, ์ด๋ Model ๊ฐ์ฒด์ ๋ช ์์ ์ธ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ฑ๋ฆฝํ ์ ์๋ค๋ ๋ป์ด๋ค.
- View ๊ฐ์ฒด๋ ์ฌ์ฌ์ฉ์ฑ์ด ํ๋ณด๋๋ค.
- Cocoa์์ UIKit ํ๋ ์ ์ํฌ๋ ๋ง์ View ๊ฐ์ฒด๋ค์ ์ ์ํ๊ณ ์ด๋ฅผ Interface Builder ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ๊ณตํ๋ค.
- UIKit์ View ๊ฐ์ฒด๋ค์ ์ฌ์ฌ์ฉํ๋ฏ๋ก์จ, ๋ชจ๋ Cocoa App์์ ๊ธฐ๋ฅ์ ์ผ๋ก ๋์ ์์ค์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ค.
Controller
Controller ๊ฐ์ฒด๋ฅผ ํ ๋จ์ด๋ก ํํํ๋ฉด โ์ค์ฌ์โ์ด๋ค.
Controller ๊ฐ์ฒด๋ View ๊ฐ์ฒด๊ฐ Model ๊ฐ์ฒด์ ์ ๊ทผ(?)ํ ์ ์๋๋ก ๋ณด์ฆํ๋ ์ญํ ์ ํ๋ฉฐ, View ๊ฐ์ฒด๊ฐ Model ๊ฐ์ฒด์ Data ๋ณํ๋ฅผ ์ธ์งํ๋ ํต๋ก ์ญํ ์ ํ๋ค.
์ผ๋ฐ์ ์ธ Cocoa MVC ํจํด์ View ๊ฐ์ฒด์์ ๋ฐ์ํ User Action์ด ํด๋น Event๋ฅผ ๋ฐฉ์ถํ๊ณ ์ด๋ฅผ Controller ๊ฐ์ฒด์ ์ ๋ฌํ๋ค. Controller ๊ฐ์ฒด๋ ํด๋น Event๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Model ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ Data๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง ๋ช
๋ นํ๋ค.
ํด๋น ๋ช
๋ น์ ํตํด Model ๊ฐ์ฒด์ ์์นํ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉฐ, ๋ณ๊ฒฝ ๋ Data๋ฅผ User์๊ฒ ์ ๋ฌํ ํ์๊ฐ ์๋ค๋ฉด, Model ๊ฐ์ฒด๋ ๋ณ๊ฒฝ ๋ด์ญ์ Controller ๊ฐ์ฒด์ ์ ๋ฌํ๋ค.
Model๋ก ๋ถํฐ ์ ๋ฌ๋ Data ๋ณ๊ฒฝ ๋ด์ญ์ Controller ๊ฐ์ฒด๋ ๋ค์ View ๊ฐ์ฒด์ ์ ๋ฌํ๋ฏ๋ก์ User์๊ฒ ๋ณด์ฌ์ง๋ Interface๊ฐ ์์ ๋๋ ๋งค์ปค๋์ฆ์ ๊ฐ๋๋ค.
Controller ๊ฐ์ฒด๋ App์ ์ ๋ฐ์ ์ธ Set-up์ด๋ ๊ฐ์ฒด์ Life Cycle์ ๊ด๋ฆฌํ ์๋ ์๋ค.
๐ฑ Cocoa Controller (Objective-C ๊ณต๋ฌธ ์ฐธ์กฐ.. ์๋ ๊บผ๋ผ ์ ํํ์ง ํ์ ์์)
Cocoa Framework์๋ ๋ ๊ฐ์ง ์ข
๋ฅ(Mediating, Coordinating)์ Controller ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ค.
๊ฐ ์ข
๋ฅ๋ ์๋ก ๋ค๋ฅธ Class ๋ค๊ณผ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ, ์๋ก ๋ค๋ฅธ ๋ฒ์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
Mediating Controller
Mediating Controller๋ NSController๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด๋ก Cocoa Bindings ๊ธฐ๋ฅ์ ์ฌ์ฉ๋๋ฉฐ, Interface Builder ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์๋ ๋ง๋ค์ด์ง ๊ฐ์ฒด์ด๋ค.
์ฌ์ฉ์๋ View ํ๋กํผํฐ์ Controller ํ๋กํผํฐ๊ฐ ๋๋ Controller ํ๋กํผํฐ์ Model์ ํน์ ํ๋กํผํฐ๊ฐ ๋ฐ์ธ๋ฉ์ ๊ตฌํํ๋๋ฐ Mediating Controller๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก User๊ฐ View์ ์๋ ๊ฐ์ ๋ณ๊ฒฝํ ๋, ์๋ก์ด ๊ฐ์ด Mediating Controller๋ฅผ ํตํด ์๋์ผ๋ก Model์ ์ ๋ฌ๋๋ค.
Coordinating Controller
Coordinating Controller๋ ์ ํ์ ์ผ๋ก NSWindowController๋ NSDocumentController, ํน์ ์ปค์คํ
์ ์ํด NSObject๋ฅผ ์์ํ SubClass ์ธ์คํด์ค๋ค.
App์์ Coordinating Controller์ ์ญํ ์ App์ ๊ธฐ๋ฅ์ฑ์ ๊ฐ๋
/์กฐ์ ํ๋ ๊ฒ์ด๋ค.
Coordianting Controller๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- Delegate ๋ฉ์ธ์ง์ ์๋ต
- Notification ๊ฐ์ง
- Action ๋ฉ์ธ์ง ์๋ต
- ์์ ํ ๊ฐ์ ์ Life Cycle ๊ด๋ฆฌ
- ๊ฐ์ฒด ๊ฐ ์ฐ๊ฒฐ์ ๋ง๋ค๊ธฐ
Mediating + Coordinating Controller
NSObject๋ฅผ ์์๋ฐ์ ์ปค์คํ
ํ SubClass์ ์ธ์คํด์ค๋ Coordinating Controller๋ก ์ ํฉํ๋ค.
์ด๋ฐ ์ข
๋ฅ์ Controller๊ฐ์ฒด๋ Mediating + Coordinating ๊ธฐ๋ฅ์ ๊ฒฐํฉํ๋ค.
Midiating ๊ธฐ๋ฅ์ ์ํด View์ Model๊ฐ Data ์ด๋ ๊ตฌํ์ Target-action/outlets/delegation ๋ฑ๊ณผ ๊ฐ์ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ค.
ํด๋น ์ธ์คํด์ค๋ Glue Code๋ฅผ ํฌํจํ๊ณ ์๋๋ฐ ์ด Code๋ ๋
์ ์ ์ผ๋ก App-specificํ๊ธฐ ๋๋ฌธ์, ๊ฐ์ฅ ์ฌ์ฌ์ฉ์ฑ์ด ์ ์ ์ข
๋ฅ์ ๊ฐ์ฒด์ด๋ค.
(์ด๊ฒ UIViewController ๊ฐ์๋ฐ ๋ง๋???)