ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

์ด์ „๊นŒ์ง€๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ๋””์ž์ธ ํŒจํ„ด์ด๋‚˜ ์•„ํ‚คํ…์ณ์— ํฌ๊ฒŒ ์‹ ๊ฒฝ์„ ์“ฐ์ง€ ์•Š๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฒˆ์— ๋™์•„๋ฆฌ์—์„œ ์•ฑ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ฐœ์ธ์•ฑ๋ณด๋‹ค ๋น„๋Œ€ํ•ด์ง„ ์•ฑ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ 

์ข€ ๋” ํšจ๊ณผ์ ์ธ ์ฝ”๋“œ๊ด€๋ฆฌ๋“ฑ์„ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ๊ทธ๋ ‡๊ฒŒ ๋””์ž์ธ ํŒจํ„ด์—๋Œ€ํ•ด ์กฐ์‚ฌ๋ฅผ ํ•ด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋””์ž์ธํŒจํ„ด์— ๋Œ€ํ•ด ์กฐ์‚ฌ๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ, ์ƒ๋‹นํžˆ ๋งŽ์€ ๋””์ž์ธ ํŒจํ„ด์ด ์žˆ๋”๋ผ๊ตฌ์š”?

๊ทธ๋ž˜๋„ ๊ทธ ์ค‘์—์„œ, ๊ฐ€์žฅ ๋Œ€์ค‘์ ์œผ๋กœ(?) ๊ณต๋ถ€๊ฐ€ ๋˜๊ณ ์žˆ๋Š” MVVMํŒจํ„ด์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๊ณต๋ถ€๋ฅผ ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

(์‚ฌ์‹ค, ํ˜„์žฌ ์•ฑ์ด MVC๋กœ ์ œ์ž‘์ด ๋˜์–ด์žˆ๋Š”๋ฐ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง ํ•˜๋ คํ•˜๋‹ค๋ณด๋‹ˆ ์ž๋ฃŒ๊ฐ€ ๋” ๋งŽ์€ ๋””์ž์ธ ํŒจํ„ด์„ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜์—ˆ์–ด์š” ใ…Ž,,,)

 

์•„์ง ๊ณต๋ถ€๊ฐ€ ์™„์ „ํžˆ ๋œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ œ๊ฐ€ ์ž๋ฃŒ๋“ค์„ ์ฝ์–ด๋ณด๊ณ  ์ฐพ์•„๋ณธ ๋‚ด์šฉ์œผ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชฉํ‘œ๋Š”, ์‹ค์ œ MVC๋กœ ์ œ์ž‘ํ•œ ์ œ ์–ดํ”Œ์„ MVVM์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ 

์ตœ๋Œ€ํ•œ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์„ค๋ช…์„ ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค..!!

 

โ€ป ์•„์ง ์ œ ์‹๊ฒฌ์ด ๋งŽ์ด ์ข๊ธฐ ๋•Œ๋ฌธ์—, ๊ธ€ ์ž‘์„ฑ์‹œ ์ž˜๋ชป ๋œ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋”ฐ๋ผ์„œ, ์ž˜๋ชป๋œ ๋‚ด์šฉ ์ง€์ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.!!

 

 

 


 

 

์ž ์šฐ์„ , ๋ณธ๊ฒฉ์ ์œผ๋กœ MVVM ํŒจํ„ด์„ ์•Œ์•„๋ณด๊ธฐ ์ „์—

์•ฑ ๊ฐœ๋ฐœ์„ ํ•ด ๋ณด์…จ๋‹ค๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ ‘ํ•˜๊ฒŒ ๋˜๋Š” ๋””์ž์ธํŒจํ„ด์ธ MVCํŒจํ„ด์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

- wiki -
๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ (Model - View - Controller, MVC)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ ์‚ฌ์šฉ๋˜๋Š”
์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.

 

์œ„์˜ ์„ค๋ช…๋งŒ ๋ณด๋ฉด,

 

"์•„ ~ ์ •ํ™•ํžˆ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ํ•˜๋‚˜์˜ ๋””์ž์ธ ํŒจํ„ด์ด๊ตฌ๋‚˜~,,,,,๊ทธ๋ž˜์„œ ๋ชจ๋ธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋Œ€์ฒด ๋ญ์ง€,,?"

 

๋ผ๋Š” ์˜๋ฌธ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

๋ชจ๋ธ(Model)์ด๋ž€?

Model์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ, iOS ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๋Š” Data๋“ค์˜ ๋ชจ์ž„ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€๋ น, ์šฐ๋ฆฌ๊ฐ€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์œ„ํ•ด ํŠน์ •URL์„ ๋”ฐ๋กœ ์ƒ์ˆ˜๋กœ ๋นผ์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์ฃ ??

static let baseURL : String = "๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” URL/"

์ด๋Ÿฌํ•œ, Constantํ•œ ๋ณ€์ˆ˜๋„ Model์— ์ €์žฅ๋˜๋Š” Data์˜ ์ผ์ข…์ž…๋‹ˆ๋‹ค.

 

๋˜, URLSession์ด๋‚˜ Alamofire๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GET ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ์ƒ๊ฐ ํ•ด ๋ด…์‹œ๋‹ค. 

์ด๋•Œ ์šฐ๋ฆฌ๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”??

๋‹น์—ฐํžˆ ์•ˆ๋ฉ๋‹ˆ๋‹ค!!

 

์„œ๋ฒ„์—์„œ Data๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ๋Š” ์ฃผ๋กœ jsonํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋ฐ›์•„์˜จ Data๋Š”

ํŠน์ •ํ•œ ๋ชจ๋ธ์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”๋กœ ์ด๋ ‡๊ฒŒ์š”!

struct GetSchool : Codable {
    let students : Int
    let classes : Int
    let schoolName : String
}

์ด๋ ‡๋“ฏ, ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ, UI์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ form์˜ ์ผ์ข…์ด๋ผ๊ณ  ํ•  ์ˆ˜๋„ ์žˆ๊ฒ ๋„ค์š”! 

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, Model์€ UI์™€๋Š” ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— UI์— Data๋ฅผ ์–ด๋–ค ์‹์œผ๋กœ ๋ณด์—ฌ์ค˜์•ผํ•  ์ง€

๊ณ ๋ฏผ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ, ์œ„์—์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด 

GetSchool๋ผ๋Š” Dataํ˜•ํƒœ(๊ตฌ์กฐ์ฒด)์— ํ•™์ƒ์ˆ˜์— ๋Œ€ํ•œ Int๊ฐ’์„ ์ €์žฅํ•˜๋Š”๊ฑด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ 

์—ฌ๊ธฐ์„œ ์ €์žฅ๋œ ํ•™์ƒ์ˆ˜ ๋ฅผ, ์–ด๋–ป๊ฒŒ ์‹ค์ œ Label์— ์ €์žฅ ํ•  ์ง€๋Š” ๊ณ ๋ฏผํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค!

 

์‹ค์ œ ๋ผ๋ฒจ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”

label.text = "\(sch.students)"

์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” Model์— ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค!

 

์ด ๋ฐ–์—๋„ Model์—๋Š” ๋ช‡๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ๋” ์žˆ๋Š”๋ฐ, ํ•œ๋ฒˆ์— ์š”์•ฝํ•˜๋ฉด

 

1. ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ฒด: ์œ„์—์„œ ์˜ˆ์‹œ๋กœ GetSchool ๊ตฌ์กฐ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

2. ๋„คํŠธ์›Œํฌ ๋กœ์ง: ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋กœ์ง์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

3. Persistance ๋กœ์ง: ์Œ..ํ”ํžˆ ์•Œ๊ณ ์žˆ๋Š” Core Data๋‚˜ Realm์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜๊ตฌ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

(persistance == CoreData or Real ์ด๊ฑด ์•„๋‹ˆ์—์š”! )

4. ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋กœ์ง: ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ, ์‹ค์ œ UI์— ํ‘œํ˜„ํ•˜๊ธฐ์œ„ํ•œ ๋ฐ์ดํ„ฐํ˜•์œผ๋กœ json์„ ํŒŒ์‹ฑํ•˜๋Š” ๋กœ์ง์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

5. Manager ๊ฐ์ฒด: ์‹ฑ๊ธ€ํ„ด ๊ฐ์ฒด์™€ ๋น„์Šทํ•˜๊ฒŒ, ๊ตฌ์กฐ์ฒด๋ฅผ ์–ด๋””์„œ๋“  ์ ‘๊ทผํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” Manager๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

6. Util, Extension, Constant:  color๋ฅผ rgb๋กœ ๊ณ„์‚ฐํ•ด์„œ ๋”ฐ๋กœ ํŠน์ • ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜, String์„ ํ™•์žฅํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋“ฑ๊ณผ ๊ฐ™์€ ์ปค์Šคํ…€ํ•œ ๋กœ์ง๋“ค์„ ์ €์žฅ ํ•˜๋Š” ๊ฒƒ๋„ Model์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

 

 

๋ทฐ(View)๋ž€?

์ด๋ฆ„์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ง ๊ทธ๋Œ€๋กœ ์‹ค์ œ ์œ ์ €์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ํ™”๋ฉด ๊ทธ ์ž์ฒด

์ฆ‰, UI๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค!

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—,

1) ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Data๋ฅผ UI๋กœ ์œ ์ €๋“ค์—๊ฒŒ ๋ณด์—ฌ์ฃผ๊ธฐ์œ„ํ•œ ๋กœ์ง

2) UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” Layout๊ณผ ๊ฐ™์€ ๋กœ์ง

๋“ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

View๋Š” ๋’ค์— ๋‚˜์˜ฌ Controller์—์„œ ์™„์„ฑ์ด ๋œ Data๋ฅผ ๋ฐ›์•„์„œ UI๋กœ ํ‘œํ˜„ํ•˜๊ฒŒ ๋ ํ…๋ฐ, 

๊ทธ๋ ‡๋‹ค๊ณ  ๋ฌด์กฐ๊ฑด  View์—์„œ ๋”ฐ๋กœ Data๋ฅผ ๋งŒ๋“ค๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค๋ฉด, ์–ด๋–ค ๋ฒ„ํŠผ์„ on/offํ•˜๋Š” ๋กœ์ง์ด ์žˆ๋‹ค๋ฉด 

ํŠน์ • ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๋ผ๋Š” Data๊ฐ€ ํ•„์š”ํ•˜๊ฒ ์ฃ ?

์ด๋Ÿฌํ•œ Data๋Š” View์—์„œ ๋งŒ๋“ค์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค!

 

๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด, 

 

" ๋ทฐ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ค‘์š”ํ•˜๋‹ค~ "

 

๋ผ๋Š” ๋ง์„ ๋งŽ์ด ๋“ค์–ด๋ณด์…จ์„ ๊ฒ๋‹ˆ๋‹ค.

์œ„์—์„œ ๋ง ํ•œ [์–ด๋–ค ๋ฒ„ํŠผ]์ด ๊ณผ์—ฐ ํ•˜๋‚˜์˜ ํ™”๋ฉด์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๋ ๊นŒ์š”??

 

์—ฌ๋Ÿฌ ํ™”๋ฉด์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๋œ๋‹ค๋ฉด,

๋งค๋ฒˆ ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ๋ง๊ณ  ํ•„์š”ํ•  ๋•Œ ๋งˆ๋‹ค ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์ง€ ์•Š์„๊นŒ์š”??

 

์ด๋ ‡๊ฒŒ ์“ธ๋ฐ์—†๋Š” ์ฝ”๋“œ์˜ ๋‚ญ๋น„๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋ผ๋„, ๋ทฐ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค.

๋น„๋‹จ ๋ทฐ ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๋ฐ˜๋ณต์ ์ธ ๋กœ์ง๋“ค๋„ ์ž˜ ์ •๋ฆฌํ•ด๋†“๊ณ  ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด

์ฝ”๋“œ์˜ ์–‘์ด ํš๊ธฐ์ ์œผ๋กœ ์ค„์–ด๋“ค๊ณ  ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๋„ ๋งŽ์ด ์ข‹์•„์งˆ๊ฒ๋‹ˆ๋‹ค.

 

 

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

Controller๋Š” View์™€ Model์˜ ์ง•๊ฒ€๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด์„œ, Model์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ View์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

(๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์— ์ž‘์„ฑ ํ•  MVVM์˜ ์š”์†Œ์ธ ViewModel๊ณผ ๊ฑฐ์˜ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ๋จผ์ € ์ƒ๊ฐํ•ฉ์‹œ๋‹ค!)

 

Controller๋Š”  Model์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ View์— ์ „๋‹ฌํ•˜๊ณ , View๋Š” ํ™”๋ฉด์„ refreshํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์„œ ๋™์ž‘ํ•˜๋„๋ก ํ•˜๋Š” ์—ญํ• ์„ Controller๊ฐ€ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค!

 

๋‹น์—ฐํžˆ ์—ญ์œผ๋กœ, View์—์„œ ๋ฐ›์€ ์–ด๋– ํ•œ ์•ก์…˜์œผ๋กœ ์ƒˆ๋กœ์šด Data๋ฅผ ๋ฐ›์œผ๋ฉด ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋กœ์ง์„ ํ†ตํ•ด

Model์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค!

 

์ด์ฒ˜๋Ÿผ Controller๋Š” ๊ฐ ๋ทฐ์— ๋งž๋Š” ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‚ฌ์šฉ์„ฑ์ด View์— ๋น„ํ•ด ๋งŽ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

 

 

 

์ž, ์ด๋ ‡๊ฒŒ MVC๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด ๋ดค์œผ๋‹ˆ

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ MVC ํŒจํ„ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

 


 

Tranitional MVC ํŒจํ„ด

์šฐ์„ , iOS์—์„œ์˜ MVCํŒจํ„ด์€ Apple-MVC ์™€ ์ผ๋ฐ˜ MVC 2๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

Traditional MVC Pattern

์œ„์˜ ์‚ฌ์ง„์„ ๋ณด๋ฉด, View๋Š” ์ƒํƒœ๊ฐ€ ๊ณ ์ •์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค!

๋ฌด์Šจ ์˜๋ฏธ์ธ๊ฐ€ ์‹ถ์ฃ ??

 

์‚ฌ์ง„์—์„œ๋Š” Model์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€” ๋•Œ ๋งˆ๋‹ค, Controller์— ์˜ํ•ด View๊ฐ€ ์ƒˆ๋กญ๊ฒŒ refresh๋˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด View์˜ ์ƒํƒœ๊ฐ€ ๊ณ ์ •์ ์ด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๊ฒ ์ฃ ???

[์–ด๋–ค ์–ดํ”Œ์—์„œ page๊ฐ€ ๋ฐ”๋€Œ๋Š” ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ์ „์ฒด์ ์ธ View๊ฐ€ ๋ฐ”๋€Œ๋ฉด์„œ ์ƒˆ๋กœ์šด ์ฐฝ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค]

์™€ ๊ฐ™์€ ๋™์ž‘์„ ์˜ˆ์‹œ๋กœ ๋“ค ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”!

 

์–ผํ• ๋ณด๋ฉด ๋…ผ๋ฆฌ์ ์œผ๋กœ๋Š” iOS์— ์ ์šฉํ•˜๊ธฐ์— ์ด์ƒ์ด ์—†์–ด๋ณด์ด์ฃ ??

ํ•˜์ง€๋งŒ, ์ด Traditional MVC ํŒจํ„ด์—๋Š” iOS์— ๋ฐ”๋กœ ์ ์šฉํ•˜๊ธฐ์—๋Š” ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค!

 

 

Model - View  - Controller ์ด 3๊ฐœ์˜ Entity๋“ค์ด
์„œ๋กœ ์„œ๋กœ ๋„ˆ๋ฌด ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€์ด ์ง€์–ด์ ธ์žˆ๊ณ , ๊ฐ Entity๊ฐ€ ์„œ๋กœ์˜ ์ƒํƒœ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๊ด€์ฐฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

 

"์ด๊ฒŒ ๋Œ€์ฒด ๋ฌด์Šจ๋ง์ด์•ผ...?" ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์ฃ ??

์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด, ์„œ๋กœ๊ฐ€ ๋…๋ฆฝ์ ์ด์ง€ ๋ชปํ•˜๋‹ค๋Š” ๋œป ์ž…๋‹ˆ๋‹ค!

 

์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด, ํŠน์ • ํ•จ์ˆ˜๋งŒ ์‹œํ—˜ ํ•ด ๋ณด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ณ  ํ˜น์€ ํŠน์ • View๋งŒ Unit๋‹จ์œ„๋กœ

ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ์œ„์˜ ๊ตฌ์กฐ์ฒ˜๋Ÿผ ๊ฐ Entity๋“ค์ด ์„œ๋กœ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉด

์ •๋ง ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ• ๊นŒ์š”??

 

์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ํ•˜๋‚˜๋ฅผ ๊ฑด๋“œ๋ฆฌ๋ฉด 3๊ฐœ๋ฅผ ๋ชจ๋‘ ๊ฑด๋“œ๋ฆฌ๊ฒŒ ๋˜๋Š” ๋Œ€์ฐธ์‚ฌ(?)๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด์ฃ !

 

apple์ด ์˜๋„ํ•˜๋Š” ์ตœ์‹  iOS ๊ฐœ๋ฐœ๋ฐฉํ–ฅ๊ณผ๋Š” ๋งŽ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ€ํ˜•๋œ ๋””์ž์ธ ํŒจํ„ด์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค....

 

 

Cocoa MVC ํŒจํ„ด

Cocoa MVC Pattern

๊ธฐ์กด์˜ MVC์—์„œ ๊ฐœ์„ ๋œ Cocoa MVCํŒจํ„ด์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, Controller๋Š” View์™€ Model์‚ฌ์ด์—์„œ ์ค‘์žฌ์ž ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” ์ค‘์žฌ์ž์˜ ์˜๋ฏธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”??

๋ฐ”๋กœ, ์„œ๋กœ๊ฐ€ ๋งŒ๋‚˜์ง€ ๋ชปํ•˜์ง€๋งŒ ์„œ๋กœ์˜ ์˜๊ฒฌ์„ ์กฐ์œจํ•ด์ฃผ๋Š” ์—ญํ• 

๋ฐ”๋กœ ์ด๊ฒƒ์ด ์ด Cocoa MVC ํŒจํ„ด์˜ ์ฃผ์š”ํ•œ ํŠน์ง•์ž…๋‹ˆ๋‹ค.

 

Traditional MVC ์—์„œ๋Š” View์™€ Model์ด ์„œ๋กœ ์ง์ ‘์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์•˜์ง€๋งŒ, 

Cocoa MVC์—์„œ๋Š” Controller๋ผ๋Š” ์ค‘์žฌ์ž๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, View์™€ Model์€ ์„œ๋กœ์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋ฅด๋Š” ์„œ๋กœ์—๊ฒŒ ๋…๋ฆฝ์ ์ธ ์กด์žฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์•ž์—์„œ Controller๋Š” ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋‚ฎ๋‹ค ๋ผ๊ณ  ํ–ˆ๋˜๊ฑฐ ๊ธฐ์–ต ํ•˜์‹œ๋‚˜์š”??

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ด์™• ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋‚ฎ์€๊ฑฐ, Model์— ์žˆ๋Š” ๊นŒ๋‹ค๋กœ์šด ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„

Controller์— ๋‹ค ๋„ฃ์–ด๋ฒ„๋ฆฌ์ž~~

 

์ด๊ฒƒ์ด ์ด Cocoa MVC์˜ ์ค‘์š”ํ•œ ํŠน์ง•์ž…๋‹ˆ๋‹ค.

 

์ž, ์–ผํ•๋ณด๋ฉด ์ƒ๋‹นํžˆ ์ง๊ด€์ ์ด๊ณ  ์ข‹์€ ๊ฒƒ ๊ฐ™์ฃ ? 

ํ•˜์ง€๋งŒ apple์€ ๋ถˆ๋งŒ์ด ๋งŽ์•˜์–ด์š”,,,,,,

 

์‚ฌ๋žŒ๋“ค์€ ํ”ํžˆ๋“ค, 

 

MVC ํŒจํ„ด์€ Massive ViewController๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŒจํ„ด์ด์•ผ~

 

๋ผ๊ณ  ๋ง ํ•˜๊ณ ๋Š” ํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€, ViewController๋ฅผ ์ฐธ์กฐ(์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ VC๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ)์€ ์ด๋ฏธ iOS ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š”

์ค‘์š”ํ•œ Topic์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ๋‹น์—ฐํžˆ, Apple์€ ๋” ๋‚˜์€ ๊ฐœ์„ ์ฑ…์„ ๊ฐ€์ ธ์™”๊ฒ ์ฃ ???

 

 

Apple's MVC ํŒจํ„ด

์‚ฌ์‹ค ์œ„์˜ ์‚ฌ์ง„์€ Realistic Cocoa MVC ํŒจํ„ด์ธ๋ฐ ํ”ํžˆ Apple's MVCํŒจํ„ด์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ์šฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์•ž์—์„œ ๋ง ํ–ˆ๋“ฏ์ด, Cocoa MVCํŒจํ„ด์—์„œ ViewContoller๋“ค์ด Massiveํ•œ ๊ฒƒ์€ ์–ด์ฉ” ์ˆ˜ ์—†์ด ๋ฐ›์•„๋“ค์—ฌ์กŒ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ด์œ  ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ด๋Ÿฐ ViewController๋“ค์€ View๋“ค์˜ life cycle์— ์ƒ๋‹นํžˆ ๋งŽ์ด ๊ด€์—ฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ฑฐ๋“ ์š”...

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— MVCํŒจํ„ด์€ ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ์—๋Š” ์ฉ ์ ํ•ฉํ•˜์ง€ ์•Š์€ ํŒจํ„ด์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”...

ํ•˜์ง€๋งŒ ์•„๋ฌด๋ž˜๋„, ๋‹ค์–‘ํ•œ ๋กœ์ง์„ ๊ฐ ๊ฐ ๋ถ„ํ• ํ•˜์ง€ ์•Š๊ณ 

๋ญ‰ํƒฑ์ด๋กœ(?) ๋ชจ์•„๋†“๋‹ค ๋ณด๋‹ˆ, ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ๋‹ต๋‹ˆ๋‹ค ~!

 

์‚ฌ์‹ค ์ด MVCํŒจํ„ด์ด ์ด๋Ÿฐ Massiveํ•จ๋„ ์—†์—ˆ๋‹ค๋ฉด, ์ œ๊ฐ€ ๊ณต๋ถ€ํ•˜๋Š” MVVM์ด๋‚˜ ์—ฌํƒ€ ๋‹ค๋ฅธ ๋””์ž์ธ ํŒจํ„ด์ด

๋‚˜์˜ค์ง€๋„ ์•Š์•˜๊ฒ ์ฃ ,,,?

 

์•„๋ฌดํŠผ! 

์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ(?) MVC๋ชจ๋ธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋Š”๋ฐ, ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์…จ์œผ๋ฉด ์ข‹๊ฒ ๋„ค์š”,,,

์•„์ง ํ•™์ƒ์ด๋ผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ž‘์„ฑํ•œ ๋ถ€์กฑํ•จ์ด ๋งŽ์€ ๊ธ€์ด์ง€๋งŒ, 

๋ถ€์กฑํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์€ ์ง€์ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํžˆ ๋ฐฐ์šฐ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

์ด์ƒ์œผ๋กœ ๊ธ€์„ ๋งˆ์น˜๊ณ , ๋‹ค์Œ์—” MVVM์— ๋Œ€ํ•œ ๊ธ€์„ ์จ ๋ณด๋„๋ก ํ• ๊ฒŒ์š”!

 

 

 

 

 

 

 

 

 

์ฐธ๊ณ ์ž๋ฃŒ : 

https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52

https://developer.apple.com/library/archive/documentation/General/Conceptual/CocoaEncyclopedia/Model-View-Controller/Model-View-Controller.html

 

 

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๋ฐ˜์‘ํ˜•
๋งํฌ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
Total
Today
Yesterday