211018 let, var, tool bar, Design Patterns, Architectures, MVC, Dictionary, Downcasting, Function Types as Parameter Types
10์ 18์ผ (์)
์ค๋์ ํ๋ํ์ต์ผ๋ก ์นดํ์ ์์์ผ๋ก ๋์์ธํจํด, ์ํคํ ์ฒ, MVC์ ๋ํ ๋ด์ฉ์ผ๋ก ํ์ต์ ์งํํ์๋ค. ์ผ์์ผ ์ ๋ ์ ๋ฏธ๋ฆฌ ์์ต์ ํ๊ณ ๊ฐ์ ํ์ต์ ์ดํดํ๋ ๊ฒ์ ๋ํด์ ํฐ ๋์์ด ๋๊ธด ํ๋ค. ๊ทธ๋๋ ์ญ์ ๋ญ๋ง์ธ์ง ๋ชจ๋ฅด๋ ํฌ์ธํธ๊ฐ ๋จ๋ฌธ๋จ๋ฌธ ์์ด์ ๋ณต์ต์ด ํ์ํด๋ณด์๋ค. ์ดํ ์๋ก์ด ํ๋ก์ ํธ ํ์์ธ ์ ์ดํฐ์ ํจ๊ป ๊ทธ๋ผ์ด๋ ๋ฃฐ๊ณผ STEP 1์ ๊ตฌํํ๊ธฐ ์์ํ๋ค.
ย
- ํ๋ฉด ํ๋จ์ ์ก์ ์ ๋ชจ์๋ ๋ฐ์ ์ด๋ฆ...๋ชฐ๋ผ
- Swift๊ฐ var๋ณด๋ค let์ ์ ํธํ๋ ์ด์ ? ๋ ์๋๋ฐ... ๋ญ์์ง?
- ๋์์ธ ํจํด์ด๋?
- ๋์์ธ ํจํด ๊ฐ์๋ฅผ ๋ฃ๋ค๊ฐ ์ฑ ์ ์ถ์ฒ๋ฐ์๋ค.
- Design Patterns vs Architectures
- ํ์ ์ ๊ตฌํํ๊ธฐ ์ ์ ์ค๊ณ๋ฅผ ์ด๋ป๊ฒ ์งํํ ๊ฒ์ธ๊ฐ?
- ๊ณผ์ผ์ ์ด๊ธฐํ ํ ๋ ๋ชจ๋ ๊ณผ์ผ์ ํ๊บผ๋ฒ์ ์ด๊ธฐํ ํ๋ ๋ฒ
- ์ ํด์ง ๋ ์ํผ๋ฅผ ์ด๋ป๊ฒ ์ ์๋ฅผ ํด์ฃผ๋ฉด ์ข์๊น?
- ๊ณผ์ผ ์ฌ๊ณ ๋ฅผ ๊ด๋ฆฌํ ๋ ์ฐ์ฐ์๋ก ๋ํ๊ณ ๋นผ์ค ์๋ ์์๊น?
- ๋ชจ๋ ๊ณผ์ผ์ ์ด๊ธฐํํ๋ ๊ฒ์ด์๋๋ผ ๊ฐ๋ณ์ ์ผ๋ก๋ ์ด๊ธฐํ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๊ณ ์ถ๋ค.
- ์๋ฌ์ฒ๋ฆฌ์ ์ผ์ด์ค๋ณ๋ก ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋ ๋ฒ์ ๋ํ ๊ณ ๋ฏผ
ย
- ํ๋ฉด ํ๋จ์ ์ก์
์ ๋ชจ์๋ ๋ฐ์ ์ด๋ฆ์
Tool bar
์ด๋ค. - Swift๊ฐ var ๋ฐ let์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ท์ฐฎ๊ฒ ์ฐธ๊ฒฌํ๋ ์ด์ ?
- ์์(let)๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ ๊ฐ์ผ๋ก ์ฝ๋๋ฅผ ๋ณด๋ค ์์ ํ๊ณ ๋ช ํํ๊ฒ ํ๊ธฐ ์ํด Swift๋ ์ ๋ฐ์ ์ผ๋ก ์์๊ฐ ์ฌ์ฉ๋๋ค. ์ด๋ ํน์๋ ๋์ค์ ์ค์๋ก ๊ฐ์ ๋ณ๊ฒฝํ์ง ์๋๋ก ํ๋๋ฐ ์ข๋ค.
- let์ ํ๋ก๊ทธ๋จ์ด ์คํ์ด ์์๋๊ธฐ ์ ์ ์์ฝ๋๋ค. 10๊ฐ์ ์์์ 10๊ฐ์ ๋ณ์๊ฐ ์๋ ํ๋ก๊ทธ๋จ์ด ์๋ ๊ฒฝ์ฐ 10๊ฐ์ ์์์ ๋ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๊ณ ์ด๊ธฐํ ๋๋ค. (ํ ๋น๋ ๊ฐ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋จ) ์์๊ฐ ๋ง์์๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋์ด๋๋๋ฐ, ๊ฐ์ด ํ ๋น๋๋ฉด ๋ณ๊ฒฝ๋์ง ์์ผ๋ฏ๋ก ์คํ์ ์๊ฐ์ ์ ์ฝํ ์ ์๋ค.
๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด
๊ตฌ๋งคํ์๋ค. ์๊ฐ๋ ๋ ๋ง๋ค ์ ๋ ํด์ผ์ง.Design Patterns
vsArchitectures
- Architecture ํฐ ๊ทธ๋ฆผ, ์ํํธ์จ์ด์ ์ ๋ฐ์ ์ธ ํฐ ๊ทธ๋ฆผ, ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ ex) ์์ ๊ฑด์ถ๋ฌผ ์์, MVC architecture
- Design Patten ์ด ์ํคํ ์ฒ ์์์ ์ธ์ธํ ๋ถ๋ถ์ ํด๊ฒฐํ๋ ํด๊ฒฐ๋ฐฉ์ ex) ์์ ๊ฑด์ถ๋ฌผ ์์ ๋ถํธํ ์ค๊ณ ๋ถ๋ถ์ ์์ ํด์ ํ์ฌ์ ๋ง๊ฒ ์ ์ฉํ๋ ๊ฒ
- ์ ์ดํฐ์ ํจ๊ป
์์๋
๋ฅผ ๊ทธ๋ ค๋ณผ๊น...? ํ์๋๋ฐ ๋ชจ๋ ์คํ ์ด ์คํ ๋์ง๊ฐ ์์์ ๊ทธ๋ฆฌ๊ธฐ๊ฐ ์ ๋งคํ๋ค. ์ผ๋จ STEP 1์ ๋ํ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋๋ก ๊ตฌํํ๊ธฐ๋ก ํ์๊ณ , ๋ ธ์ ์ผ๋ก ๊ฐ์ด ๋ฉ๋ชจํด๊ฐ๋ฉด์FruitStore
์JuiceMaker
์ ํ์ ์ ๋ง๋ค๊ณ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ ํ์ผ๋ค. - ๊ณผ์ผ์ ์ด๊ธฐ๊ฐ์ ์ ํด์ ์ด๊ธฐํํ๋ ๋ถ๋ถ์ ๋ํด์ ๋์๊ฒ ์ข์ ์๊ฐ์ด ์์ด์ ์ ์ดํฐ์๊ฒ ์ ์์ ํ๋ค. ์ฐ์ ๊ณผ์ผ๊ณผ ๊ณผ์ผ์ ๊ฐฏ์๋ฅผ ์ ์ฅํ๋ ์ปฌ๋ ์
์ผ๋ก
Dictionary
๊ฐ ์ ํฉํ๋ค๊ณ ์๊ฒฌ์ ๋๋์๊ณ , Dictionary์ด๋์ ๋ผ์ด์
์ค์ ํํ์ ๋ฐ์์ ๋์ ๋๋ฆฌ๋ก ์ด๊ธฐํ ํด์ฃผ๋ ์ด๋์ ๋ผ์ด์ ๊ฐ ์์ด์ ์ฐพ์๋ณด์๊ณ , ์ ํ์ฉํด์ ๊ตฌํํด๋ณด์๋ค.Dictionary init(uniqueKeysWithValues:)
- ์ ํด์ง ๋ ์ํผ๋ฅผ ๋ฐ์์ ๊ณผ์ผ์ ์ฌ๊ณ ๋ฅผ ๊ด๋ฆฌํด์ฃผ์ด์ผ ํ๋ ๋ถ๋ถ์ด ์์๋๋ฐ, ๋ ์ํผ๋ฅผ ์ด๋ค์์ผ๋ก ๋ฐ์์ฌ์ง ์ข์ ์๊ฐ์ด ์๋ฌ๋ค. ์ ์ดํฐ๊ฐ Dictionary๋ก ํตํด์ ๋ฐ๋ ๊ธฐ๋ฐํ ์์ด๋์ด๋ฅผ ๋ ์ฌ๋ผ์ ํ์ฉํด๋ณด์๋ค.
- ์ฐ์ฐ์๋ก ๋ํ๊ณ ๋นผ๋ ๋ฐฉ๋ฒ ์ญ์ ์ ์ดํฐ์ ์์ด๋์ด์๋๋ฐ, ๋ฐ๋ก ํ๋ผ๋ฏธํฐ๋ก ํจ์๋ฅผ ๋ฐ์์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด์๋ค.
var num = 3
func operate(operNum: Int, fun: (Int, Int) -> Int) {
num = fun(num, operNum)
}
operate(operNum: 6, fun: +)
print(num) // 9
- ๊ณผ์ผ์ ๊ฐ๋ณ์ ์ผ๋ก ์ด๊ธฐํํ๋ผ๋ ์๊ตฌ์ฌํญ์ ์์ง๋ง ๊ถ๊ธํด์ ๊ตฌํํด๋ณด๊ธฐ๋ก ํ์๋ค. ์ด๋์ ๋ผ์ด์ ๋ฅผ ๋ค์ ๋ณต์ตํ๊ณ ๋ง๋ค์ด๋ณด๊ธฐ๋ก...
- ์๋๋
enum
๋ด๋ถ์์static
๋ฉ์๋๋ฅผ ๊ตฌํํ์ฌ ์ถ๋ ฅํด์ฃผ๊ธฐ๋ก ํ์์ผ๋, ๊ผญstatic
๋ฉ์๋๋ก ๊ตฌํํด์ฃผ์ง ์์๋Error
ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ค์ด์บ์คํ (as
)์ ํตํด์ ๋ฉ์๋๋ฅผ ํธ์ถํด์ค ์ ์์๋ค.
enum RequestError: Error {
case wrongInput
case notFound
case fruitStockOut
func printErrorMessage() {
switch self {
case RequestError.wrongInput:
print("์๋์ ์๋ชป ์
๋ ฅํ์์ต๋๋ค.")
case RequestError.notFound:
print("์ ํํ ๊ณผ์ผ์ด ์กด์ฌํ์ง ์์ต๋๋ค.")
case RequestError.fruitStockOut:
print("๊ณผ์ผ์ ์ฌ๊ณ ๊ฐ ๋ถ์กฑํฉ๋๋ค.")
}
}
}
do {
try maker.fruitsMixer(juice: .strawberryBanana)
} catch let error as RequestError {
error.printErrorMessage()
}
ย
Design Pattern
- ์ค๊ณํ ๋ ์์ฃผ ์ฐ์ด๋ ํ ํ๋ฆฟ
- ์ ๋ฐฐ๋ค์ ์ฝ์ง ๊ธฐ๋ก
- ์ฝ๋์ ๋ชจ์์ ๋์์ธ ํจํด์ ์ํํธ์จ์ด ๊ณตํ์ ์ํํธ์จ์ด ์ค๊ณ์์ ๊ณตํต์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํด ์์ฃผ ์ฐ์ด๋ ์ค๊ณ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ ํจํด์ด๋ค.
๋์์ธ ํจํด์ ์ฐธ๊ณ ํ์ฌ ๊ฐ๋ฐํ ๊ฒฝ์ฐ ํจ์จ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ, ์ด์ฉ์ฑ์ด ๋์์ง๋ฉฐ ํ๋ก๊ทธ๋จ์ ์ต์ ํ์ ๋์์ด ๋๋ค.
- OOP์ ๋ค์ํ ๋ฌธ์ ์ํฉ์ ๋ํ ์๋ฐฉ
- ํ๋ก๊ทธ๋๋จธ ์ฌ์ด์ ํ์ ํจ์จ ํฅ์
- ํ๋ก๊ทธ๋๋จธ ์ฌ์ด์ ์์ฌ์ํต ์ฆ์ง
- ์ฝ๋์ ์์ ํ ๋ฐ ์ต์ ํ
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
์ฃผ์ด์ง ํจํด์ ์ํฉ์ ๋ง๊ฒ ๋ณ๊ฒฝ์ ํด์ ์ฌ์ฉํด์ผ ํ๋๋ฐ ๋์์ธ ํจํด์ ์ง์ฐฉํ๊ฒ ๋๋ฉด ์ ์ฐํ๊ฒ ํจํด์ ์ ์ฉ ๋ฐ ๋ณ๊ฒฝ์ ๋ชปํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ 100ํผ์ผํธ ์งํฌ ํ์๋ ์์ง๋ง ๋ช ํํ๊ฒ ์์๋๋ฉด ์ธ ์ผ์ด ๋ง๋ค.
Architectures
๊ฐ๋จํ๊ฒ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ๋ผ๊ณ ์๊ฐํ๋ค. ์ํค์์๋ ์ํํธ์จ์ด ๋ด์์์ ๊ณตํต์ ์ธ ๋ฐ์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํ ์ผ๋ฐ์ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์ค๋ช ํ๊ณ ์๋ค.
ํ๋ก๊ทธ๋จ์ ์ ๋๋ก ์์ฑ๋ง ๋๋ค๋ฉด ์คํ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ด๋ฐ ํ๋ก๊ทธ๋จ๋ค์ ์ ์ง๋ณด์์ ๊ต์ฅํ ๋ง์ ๋น์ฉ์ด ๋ค์ด๊ฐ๋ฉฐ ์ค๋ ฅ์๋ ๊ฐ๋ฐ์๊ฐ ๋ณด๊ธฐ์๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค๊ณ ๋ณผ ์ ์๋ค.
- ๊ท ํ์กํ ๋ถ๋ฐฐ(Balanced Distribution)
- ๊ฐ์ฒด ์งํฅ ์์น ์ค Single Responsibility์ ๊ธฐ๋ฐ > ํ๋์ ๊ฐ์ฒด๋ ํ๋์ ์ญํ ๋ง ๊ฐ๋๋ค
- ๋ชจ๋(ํด๋์ค)๋ค์ ๋ ๋ฆฝ์ฑ์ด ๋จ์ด์ง๋ฉด ํ ์คํธ๊ฐ ์ด๋ ต๋ค
- ํ
์คํธ ๊ฐ๋ฅ (Testablity)
- ํ ์คํธ ์ค ๋ฐ์ํ๋ ์ด์๋ฅผ ์ฌ์ ์ ๋ฐ๊ฒฌํ๊ธฐ ์ํ ๋จ๊ณ๋ค.
- ์ฌ์ฉํ๊ธฐ ์ฌ์ด์ง (Easy of Use)
- ๊ฐ๋ฐ ์๋์ ๊ด๋ จ์ด ์๋ค.
- ๋จ๋ฐฉํฅ์ฑ ๋ฐ์ดํฐ ํ๋ฆ(Unidirectional Data Flow)
- ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์๊ฒ ํ๋ฉฐ ์ฌ์ด ๋๋ฒ๊น ์ ์ ๊ณตํ๋ค.
- ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์์ธ์ ์ฐพ๊ธฐ ํ๋ค์ด ์ง๋ ๊ณต์ ์์์ ์ฌ์ฉ๋ ํผํด์ผ ํ๋ค.
4๊ฐ์ง ์กฐ๊ฑด์ ์ถฉ์กฑ ์ํค๋ ์๋ฒฝํ ์ํคํ ์ฒ๋ ์กด์ฌํ์ง ์๋๋ค. ๊ทธ๋ฌ๋๊น ์์ ์ ํ๋ก์ ํธ ์ฑ๊ฒฉ์ ๋ง์ถฐ์ ์ ์ ํ ์ํคํ ์ฒ ๋์ ์ด ํ์ํ๋ค.
iOS์์๋ 4๊ฐ์ง ์กฐ๊ฑด ์ค ๊ท ํ์กํ ๋ถ๋ฐฐ๋ฅผ ์ํด์ ํฌ๊ฒ 3๊ฐ์ง๋ก ๋๋์ด ์ฝ๋ฉ์ด ์งํ๋๋ค.
- Modelโจ๋ฐ์ดํฐ ์กฐ์์ด ์ผ์ด๋๊ณ ์ด๋ฅผ ๋ด๋นํ๋ ๋ถ๋ถ
- Viewโจ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ์๊ฐ์ ์ธ ๋ถ๋ถ์ผ๋ก UI์ ํด๋น.
- Controller / Presenter / ViewModelโจ์ด ๋ถ๋ถ์ Model๊ณผ View ์ฌ์ด์ ์ค์ฌ์๋ก View๋ฅผ ํตํด ๋ฐ์ํ ์ฌ์ฉ์์ ์ก์ ์ ๋ฐ๋ผ ๋์ํ๋ฉฐ Model์ ๊ฐ์ ์กฐ์ ์ ์์ฒญํ๋ฉฐ Model ๊ฐ์ ๋ณํ์ ๋ง๊ฒ View๋ฅผ ๊ฐฑ์ ํ๋ ์ญํ ๊ทธ๋์ iOS์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ํคํ ์ฒ ํจํด์ธ MVC, MVP, MVVM๊ฐ ์๋ค.
Design Patterns vs Architectures
- Architecture ํฐ ๊ทธ๋ฆผ, ์ํํธ์จ์ด์ ์ ๋ฐ์ ์ธ ํฐ ๊ทธ๋ฆผ, ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ ex) ์์ ๊ฑด์ถ๋ฌผ ์์, MVC architecture
- Design Patten ์ด ์ํคํ ์ฒ ์์์ ์ธ์ธํ ๋ถ๋ถ์ ํด๊ฒฐํ๋ ํด๊ฒฐ๋ฐฉ์ ex) ์์ ๊ฑด์ถ๋ฌผ ์์ ๋ถํธํ ์ค๊ณ ๋ถ๋ถ์ ์์ ํด์ ํ์ฌ์ ๋ง๊ฒ ์ ์ฉํ๋ ๊ฒ
MVC (Model-View-Controller)
Xcode ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์์ Model, View, Controller ํด๋๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ๊ด๋ฆฌํ๋ค.
์ฑ์ด ์ ํํ ๋ฌด์์ ํ ์ง ์ฝ๋ฉํ๋ ๊ฒ์ด๋ค. ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ ํจ์๋ค์ด ์ ์๋๊ณ , ์ฒ๋ฆฌ๋๋ ๋ฐ์ดํฐ(ํด๋์ค, ๊ตฌ์กฐ์ฒด ๋ฑ)์ ๋ด๋ถ ์๊ณ ๋ฆฌ์ฆ์ด ์ ์๋๋ค.
์ฌ์ฉ์์๊ฒ ๋ง ๊ทธ๋๋ก ๋ณด์ฌ์ง๋ ์์ญ์ผ๋ก ๋ณผ ์ ์๋ค. Storyboard ํ์ผ์ ๋น๋กฏํด์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ์์ญ์ผ๋ก ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
Model ๊ณผ View ์ฌ์ด์ ๋ค๋ฆฌ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. Controller๋ Model์ด ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง ๋ช ๋ น์ ๋ด๋ฆฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ช ๋ น์ ํ ๋๋ก ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ์ธํฐํ์ด์ค ๋ถ๋ถ๋ ์์ ์ ํ๋ค. ๋ณดํต ์ฌ๊ธฐ์ @IBAction ํจ์๋ค์ด ์ ์๋๋ค. ์ฆ ์ฌ์ฉ์๊ฐ View๋ฅผ ํตํด Interaction์ ํ๋ฉด Controller๊ฐ ์ด๋ฅผ controlํ๋ค๋ ๊ฒ์ด๋ค.
Model ์์๋ ๋น์ฆ๋์ค ๋ก์ง์, View์์๋ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ๊ฒ๋ค์, ๊ทธ๋ฆฌ๊ณ Controller ์์๋ ์ด๋ป๊ฒ Model ์ ํ์ฉํด์ View ์๊ฒ ๋ณด์ฌ์ง ๊ฒ์ธ์ง๋ง ์ ์ํ๋ฉด ๋๋, ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ , ๊ด๋ฆฌ๊ฐ ์ฉ์ดํด์ง๋ค.
Controller๋ Model๊ณผ View์ ์ง์ ์ง์๋ฅผ ํ ์ ์์ง๋ง Model๊ณผ View๋ Controller์ ์ง์ ์ ์ผ๋ก ์๋ฆด ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ง์ฝ Model์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒ์ ์๋ฆฌ๊ฑฐ๋, View์์ ์ฌ์ฉ์์ action์ด ๋ฐ์ํ์ ๋ Controller์๊ฒ ์ด๋ป๊ฒ ์๋ฆด๊น?
์ปจํธ๋กค๋ฌ๋ View์ ๋ํด์ outlet์ ์ด์ฉํด์ View์๊ฒ ์ง์ ์ ๊ทผํ ์ ์๋ค. View๋ target - Action ๊ตฌ์กฐ๋ก ์ฌ์ฉ์์ ํ์์ ๋ฐ๋ผ ํ์ํ ํจ์๋ฅผ ํธ์ถ ํ ์ ์๋ค. ๋ํ ๊ตฌ์กฐ์ ์ผ๋ก ๋ฏธ๋ฆฌ ์ ํด์ง ๋ฐฉ์์ผ๋ก ํ์์ ๋ํ ์์ฒญ (delegate), ๋ฐ์ดํฐ์ ๋ํ ์์ฒญ(data-source)์ ํ ์ ์๋ค.
์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์ ์ ๊ทผํ ์ ์๋ค. ํ์ง๋ง ๋ชจ๋ธ์ Notification & KVO ๋ฐฉ์์ ํตํด ๋ชจ๋ธ์ ๋ณํ๋ฅผ ์ปจํธ๋กค๋ฌ์๊ฒ ์๋ฆด ์ ์๋ค.
- ๋ค๋ฅธ ํจํด์ ๋นํด ์ฝ๋๋์ด ์ ๋ค
- ์ ํ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๊ณ ์๋ ํจํด์ด๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค
- ๋ง์ ๊ฐ๋ฐ์๋ค์๊ฒ ์น์ํ ํจํด์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ค์ด ์ฝ๊ฒ ์ ์ง๋ณด์ ํ ์ ์๋ค.
- ๊ฐ๋ฐ ์๋๊ฐ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ์ํคํ ์ฒ๊ฐ ์ค์ํ์ง ์์ ๋ ์ฌ์ฉํ๊ฑฐ๋ ๊ท๋ชจ๊ฐ ์์ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๊ธฐ ์ข๋ค.
- ์์ ์ฌ์ง๊ณผ ๊ฐ์ด ๋ทฐ์ ์ปจํธ๋กค๋ฌ๊ฐ ๋๋ฌด ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋ค.
- View์ Controller๊ฐ ๋ถ์ด์์ผ๋ฉฐ Controller๊ฐ View์ Lift Cycle๊น์ง ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ View์ Controller๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ด๋ ต๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์ฌ์ฌ์ฉ์ฑ์ด ๋จ์ด์ง๊ณ ์ ๋ ํ ์คํธ๋ฅผ ์งํํ๊ธฐ ํ๋ค์ด์ง๋ค.
- ๋๋ถ๋ถ์ ์ฝ๋๊ฐ Controller์ ๋ฐ์ง๋ ์ ์๋ค. Life Cycle ๊ด๋ฆฌ ๋ฟ๋ง ์๋๋ผ delegate๋ datasource๊ด๋ฆฌ, ๋คํธ์ํฌ ์์ฒญ, DB์ ๋ฐ์ดํฐ ์์ฒญ ๋ฑ ๋ง์ ์ฝ๋๊ฐ Controller์ ์์ฑ๋๋ฉด Controller์ ํฌ๊ธฐ๋ ๋น๋ํด์ง๊ณ ๋ด๋ถ ๊ตฌ์กฐ๋ ๋ณต์กํด์ง๊ฒ ๋๋ค.
- ์ด๋ฐ ์ํฉ์ ๋น์ ํด ๋ง์ ์ฌ๋๋ค์ด Massive View Contorller๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค
- ์ด๋ ๊ฒ ๋ณต์กํด์ง ์ฝ๋๋ ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ ์ง๋ณด์ํ๊ธฐ ํ๋ค๊ฒ ๋ง๋ ๋ค.
- DistributionโจView์ Model์ ๋ถ๋ฆฌ๋์์ง๋ง View์ Controller๋ ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋ค.
- TestabilityโจView์ Controller๊ฐ ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์ด์ Model๋ง ํ ์คํธ๋ฅผ ์งํ ํ ์ ์๋ค.
- Easy of Useโจ๊ฐ์ฅ ์ ์ ์์ ์ฝ๋๋ฅผ ํ์ํ๋ฉฐ ๊ฒฝํ์ด ์ ์ ๊ฐ๋ฐ์๋ค๋ ์ฝ๊ฒ ์ ์ง๋ณด์ ํ ์ ์๋ค.
์ํคํ ์ฒ๋ฅผ ์ ๋ชจ๋ฅผ ๋ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ํจํด์ด์ง๋ง ์์ ํ๋ก์ ํธ์ฌ๋ ๋ง์ ์ ์ง๋ณด์ ๋น์ฉ์ด ๋ค์ด๊ฐ๋ค.