ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] MVC ๋ž€? (feat. Cocoa MVC)
    iOS/๐Ÿค– App 2021. 3. 3. 23:30

    1์ฐจ ์ˆ˜์ •: 21.07.26

    2์ฐจ ์ˆ˜์ •: 21.08.05

     

    ์• ํ”Œ ์•„์นด์ด๋ธŒ ๋ฌธ์„œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

     

     

    ์•ˆ๋…•ํ•˜์„ธ์š”๐Ÿถ

     

    ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” iOS ๊ฐœ๋ฐœ ์ž…๋ฌธ ์‹œ๊ธฐ์—

    ๊ฑฐ์˜ ํ•„์—ฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”

    ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ธ Model-view-controller (MVC) ํŒจํ„ด์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์•Œ์•„๋ณด๊ณ ,

    ์• ํ”Œ์—์„œ ์ œ์‹œํ•˜๋Š” Cocoa MVC ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

     

    ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด๋ณผ๊ฒŒ์š”!!!๐Ÿ”ฅ

     

    ์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ:

     

    MVC์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

    Cocoa MVC๋ž€?

     Model, View, View controller ์˜ ์—ญํ• 

    Cocoa MVC์˜ ์žฅ์  ๊ณผ ๋‹จ์ 


     

    ์šฐ์„ ,  MVC ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

    ์ด ํŒจํ„ด์€ User Interface ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด์œผ๋กœ,

     

    1. ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ๊ณผ์ •

    2. ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ‘œํ˜„ํ•˜๋Š” ๊ณผ์ •

    3. ์ฒ˜๋ฆฌ๋œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ๊ณผ์ •

     

    ์ด 3๊ฐ€์ง€์˜ ๊ณผ์ •์„ 3๊ฐ€์ง€ ์—ญํ• ๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

     

    ๋ฐ์ŠคํŠธํƒ‘์˜ GUI ์—์„œ ์ „ํ†ต์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜์–ด ์™”์œผ๋ฉฐ, ์›น ์•ฑ์„ ์„ค๊ณ„ํ•˜๋Š”๋Œ€์— ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์œ ๋ช…ํ•œ ํŒจํ„ด์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

     

    https://en.wikipedia.org/wiki/Model–view–controller

     

    ์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ์œ„ํ‚ค ๋ฐฑ๊ณผ์˜ ๋‚ด์šฉ์ธ๋ฐ์š”.

     

    iOS๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ Cocoa Touch ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ MVC ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

     

    ์‚ฌ์‹ค ์• ํ”Œ์—์„œ ์ œ์‹œํ•˜๋Š” MVC ์˜ ๊ฐœ๋…์€ ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค!!!

     

    ์ด๊ฒƒ์„ Cocoa MVC ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ถ€๋ฅด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

     

    ํ˜น์‹œ Cocoa ์— ๋Œ€ํ•ด์„œ ์ž˜ ๋ชจ๋ฅด์‹ ๋‹ค๋ฉด

    >>> [iOS] Cocoa (touch) ๋ž€? <<<


     

    Cocoa MVC ๋ž€?

     

    Cocoa MVC ํŒจํ„ด์€

    ์•ฑ ๋‚ด์˜ ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์„ธ ๊ฐ€์ง€์˜ ์—ญํ•  ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ€์ง€๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

     

    ์„ธ ๊ฐ€์ง€์˜ ์—ญํ• ์€ ๊ฐ๊ฐ Model, View, Contorller ์ž…๋‹ˆ๋‹ค.

     

    ์ด ํŒจํ„ด์€:

     

    ์•ฑ์—์„œ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ˆ˜ํ–‰ํ•  ์—ญํ• ์„ 3๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

    3๊ฐ€์ง€ ์—ญํ• ์€ Model, View, Controller

     

    ์—ญํ• ์ด ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ๊ฐ„ ์˜์‚ฌ์†Œํ†ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

     

    ์ด ๋•Œ, ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ๋“ค์„ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ชจ์•„์„œ ๋ ˆ์ด์–ด  ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

    ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ชจ๋ธ ์—ญํ•  ์˜ค๋ธŒ์ ํŠธ๋“ค์„ ๋ชจ์•„์„œ ๋ชจ๋ธ ๋ ˆ์ด์–ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค

     

     

    ์•„๋ž˜ ๊ทธ๋ฆผ์€ Cocoa MVC ๋ฅผ ํ‘œํ˜„ํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

    ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•œ Cocoa MVC

     

    ํŠน์ง•์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด์ž๋ฉด ๐Ÿค”

     

    View ์™€ Model ์‚ฌ์ด์˜ ์ง์ ‘์ ์ธ ์—ฐ๊ฒฐ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

    ๋‘˜์€ ์„œ๋กœ์— ๋Œ€ํ•ด์„œ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

     

    View ์™€  Model  ๋ ˆ์ด์–ด ์‚ฌ์ด์˜ ์ •๋ณด ๊ตํ™˜์€ Controller ๋ฅผ ํ†ตํ•ด์„œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

     

    Controller ๋Š” ์ค‘์žฌ์ž (meditor) ์˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

     

    ๋˜ํ•œ ์œ„ํ‚ค์—์„œ ์ œ์‹œํ•˜๋Š” MVC ๋Š” ์ •๋ณด์˜ ํ๋ฆ„์ด undirectional ํ•ฉ๋‹ˆ๋‹ค.

    ๊ทธ๋Ÿฐ๋ฐ Cocoa MVC๋Š” ๋ ˆ์ด์–ด ๊ฐ„์— bi-directional ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋„ค์š”.

     

    ์ด์ œ ์—ญํ• ๋ณ„๋กœ ํŠน์ง•์„ ํ•˜๋‚˜์”ฉ ์‚ดํŽด ๋ณผ๊ฒŒ์š”!

     

    Model Objects

    ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ๋Š”...

     

    1. ํŠน์ • ์•ฑ์— ํ•œ์ •๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์บก์Šํ™”ํ•ฉ๋‹ˆ๋‹ค.

     

    2. ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋กœ์ง์™€ ๊ณ„์‚ฐ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

     

    ์บก์Šํ™”๋ฅผ ํ•œ๋‹ค๋ฉด ์ €์ ˆ๋กœ ๋”ฐ๋ผ์˜ค๊ฒŒ ๋˜๋Š” ์˜ต์…˜์ด์ฃ ?

    ์บก์Šํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ• ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

     

    ํ•˜๋‚˜์˜ ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ๋Š” ๋‹ค๋ฅธ ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ์™€ 1 ๋Œ€ 1 ํ˜น์€ 1 ๋Œ€ ๋‹ค์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

     

    ์•ฑ์˜ ์˜์†์ ์ธ ๋ฐ์ดํ„ฐ๋“ค์€ ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ฐฐ์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ์˜์†์  (persistent) ์ด๋ผ๋Š” ์˜๋ฏธ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹Œ disk, db ๋“ฑ์— ๋‹ด๊ฒจ ๊ด€๋ฆฌ๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

     

    ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ๋“ค์€ ํŠน์ •ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋„๋ฉ”์ธ์— ํ•„์š”ํ•œ ์ง€์‹์ด๋‚˜ ์ „๋ฌธ์  ์ง€์‹์„ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—,

    ๋‹ค๋ฅธ ๋น„์Šทํ•œ ๋„๋ฉ”์ธ์—์„œ๋„ ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ๋˜ํ•œ ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ์™€ ๋ทฐ ์˜ค๋ธŒ์ ํŠธ๋Š” ์„œ๋กœ ์–ด๋– ํ•œ ๋ช…์‹œ์  ์—ฐ๊ฒฐ์ด ์—†๋Š” ๊ฒƒ์ด MVC์˜ ์ด์ƒ์ ์ธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

     

    ์ด ์ฝ”๋“œ๋Š” ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๊ฐ€์ ธ์™€์„œ cell์„ ๊ตฌ์„ฑํ•˜๊ณ ์žˆ๋‹ค..........์ด๋ ‡๊ฒŒ ์งœ๋ฉด ์•ˆ๋œ๋‹ค๋Š” ๋œป....

     

    ๋ทฐ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ํ‘œํ˜„ํ•˜๊ฑฐ๋‚˜

    ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ๊ทธ๊ฒƒ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

     

    < ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ์™€ ์˜์‚ฌ์†Œํ†ตํ•˜๋Š” ๋ฐฉ๋ฒ• >

    ๋ทฐ ๋ ˆ์ด์–ด์—์„œ ๋ฐœ์ƒํ•œ ์‚ฌ์šฉ์ž ์•ก์…˜์€ ์ปจํŠธ๋กค๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ†ตํ•ด์„œ ๋ชจ๋ธ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ,

    ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ์˜ ์ƒ์„ฑ์ด๋‚˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ผ์œผํ‚ต๋‹ˆ๋‹ค.

    ์ฆ‰, ์ „์ˆ ํ•œ๋Œ€๋กœ ๋ทฐ ์˜ค๋ธŒ์ ํŠธ๋Š” ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ง์ ‘ ์ƒ์„ฑ, ์ˆ˜์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

     

    ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋ ๋•Œ, ๊ทธ ๋‚ด์šฉ์„ ์ปจํŠธ๋กค๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ ,

    ๋‹ค์‹œ ์ปจํŠธ๋กค๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ๋Š” ๋ทฐ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์„œ ํ™”๋ฉด์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.


     

    View Objects

    ๋ทฐ ์˜ค๋ธŒ์ ํŠธ๋Š” ์•ฑ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋ˆˆ์œผ๋กœ ๋ณด๊ฒŒ ๋˜๋Š” ์˜ค๋ธŒ์ ํŠธ ์ž…๋‹ˆ๋‹ค ๐Ÿ‘

     

    ๋ทฐ ์˜ค๋ธŒ์ ํŠธ๋Š” ์Šค์Šค๋กœ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•๊ณผ ์‚ฌ์šฉ์ž ์•ก์…˜์— ๋ฐ˜์‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

     

     

    ์‚ฌ์šฉ์ž ์•ก์…˜ (์ด๋ฒคํŠธ) ์— ๋ฐ˜์‘ํ•˜๋Š” UIResponder ์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด?

    >>> [iOS] ๋ฆฌ์Šคํฐ๋” ์ฒด์ธ์ด๋ž€? <<<

     

     

    ๋ทฐ ์˜ค๋ธŒ์ ํŠธ์˜ ์ฃผ๋œ ๋ชฉ์ ์€ ์•ฑ์˜ ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ณ ,

    ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

     

    MVC ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ ์•ฑ์—์„œ๋Š” ๋ทฐ ์˜ค๋ธŒ์ ํŠธ์™€ ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ณดํ†ต ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ํ”„๋ ˆ์ž„์›Œํฌ๋‹จ์—์„œ๋„ ๋ทฐ๋Š” ๋ชจ๋ธ์— ๋Œ€ํ•ด์„œ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

     

    Xcode์—์„œ Interface Builder ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ˆ˜๋งŽ์€ ๋ทฐ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

     

    < ๋ทฐ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ์™€ ์˜์‚ฌ์†Œํ†ตํ•˜๋Š” ๋ฐฉ๋ฒ• >

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

     

    ๋ทฐ ์˜ค๋ธŒ์ ํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ ์•ก์…˜ (๊ทธ๋ฆฌ๊ณ  ์•ก์…˜์ด ๋ฐœ์ƒ์‹œํ‚จ ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”) ์„

    ์ปจํŠธ๋กค๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.


     

    Controller Objects

    ์ปจํŠธ๋กค๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ๋Š” ์ค‘์žฌ์ž ์ž…๋‹ˆ๋‹ค.

     

    ํ•œ ๊ฐœ ์ด์ƒ์˜ ๋ทฐ ์˜ค๋ธŒ์ ํŠธ์™€ ํ•œ ๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ ์‚ฌ์ด๋ฅผ ์ค‘์žฌํ•ฉ๋‹ˆ๋‹ค.

     

    ์•ž์„œ ์„ค๋ช…ํ•˜์˜€๋“ฏ์ด, ๋ชจ๋ธ๊ณผ ๋ทฐ๋Š” ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด MVC ์˜ ์ด์ƒ์ ์ธ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค.

     

    ์ปจํŠธ๋กค๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ๋Š” ์•ฑ์˜ ๊ธฐ์ดˆ ๊ตฌ์„ฑ๊ณผ ์กฐ์œจํ•˜๋Š” ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ๋“ค์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

    ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ = ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ, ๋ทฐ ์˜ค๋ธŒ์ ํŠธ

     

    < ์ปจํŠธ๋กค๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ์™€ ์˜์‚ฌ์†Œํ†ตํ•˜๋Š” ๋ฐฉ๋ฒ• >

    ์ปจํŠธ๋กค๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ๋Š” ๋ทฐ ์˜ค๋ธŒ์ ํŠธ์—์„œ ๋ฐœ์ƒํ•œ ์‚ฌ์šฉ์ž ์•ก์…˜์„ ํ•ด์„ํ•˜๊ณ ,

    ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ ๋ ˆ์ด์–ด์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

     

    ๋ฐ˜๋Œ€๋กœ ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ์— ๋ณ€๊ฒฝ์ด ์žˆ๋‹ค๋ฉด, ์ปจํŠธ๋กค๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ๋Š” ๊ทธ ์ƒˆ๋กœ์šด ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ทฐ ์˜ค๋ธŒ์ ํŠธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ๋ทฐ ์˜ค๋ธŒ์ ํŠธ๋Š” ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์— ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.


     

    Cocoa MVC ์˜ '๋‹จ์ ' ๊ณผ ์žฅ์ 

     

    ์‹ค์ œ Cocoa MVC๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๊ตฌ์กฐ

     

    ํ˜„์‹ค์€ ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

     

    View ์™€ Controller ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ธ Cocoa MVC ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ,

    View ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” Controller ์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค๊ณ  ๋ณด๊ธฐ ํž˜๋“ญ๋‹ˆ๋‹ค.

    "tightly coupled"

     

    ๋˜ํ•œ View ์™€ Model์˜ ์—ญํ• ์ด ์•„๋‹Œ ๊ฒƒ์€ ์ „๋ถ€ Controller ๊ฐ€ ์ฑ…์ž„์ ธ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—,

    Controller ์˜ ์—ญํ• ์ด ๋ฐฉ๋Œ€ํ•ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

     

    ์ด๋Ÿฐ MVC์˜ ๋‹จ์ ์„ ๊ผฌ์ง‘์–ด Massive View Controller (์ด๊ฒƒ๋„ ์ค„์ด๋ฉด MVC) ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

     

    ๋ชจ๋“  ์—ญํ• ์ด ํ•œ ํด๋ž˜์Šค์— ๋ชจ์—ฌ์žˆ์œผ๋ฉด, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๋งค์šฐ ํž˜๋“ค์–ด ์ง‘๋‹ˆ๋‹ค.

     

    ์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™์  ๊ด€์ ์—์„œ๋Š” ์‘์ง‘๋„๊ฐ€ ๋–จ์–ด์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ธ๋ฐ,

     

    ์ด์ƒ์ ์œผ๋กœ A๋ž€ ๊ธฐ๋Šฅ์€ A ํด๋ž˜์Šค์—, B๋ž€ ๊ธฐ๋Šฅ์€ B ํด๋ž˜์Šค๊ฐ€ ์ฑ…์ž„์ง€๋Š”

    SRP ์˜ ์›์น™์„ ์ค€์ˆ˜ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์œ ์ง€ ๋ณด์ˆ˜์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

     

    ์–ด๋–ค ์—ญํ• ์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

     

     

    ๋˜ํ•œ Controller ๋Š” UIKit ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ…Œ์ŠคํŠธ๊ฐ€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

     

    ํ•˜๋‚˜๋ฅผ ์˜ˆ๋กœ ๋“ค์ž๋ฉด,

    viewDidLoad(animated: Bool) ๊ณผ ๊ฐ™์€ UIKit ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

     

     

    ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Cocoa MVC ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

     

    ์šฐ์„ , ํŒจํ„ด์˜ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ฌธํ•˜๋Š” ๋‹จ๊ณ„์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ๋˜ํ•œ ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

    ํ† ์ด ํ”„๋กœ์ ํŠธ๋‚˜, ํ•ด์ปคํ†ค๊ณผ ๊ฐ™์€ ์งง์€ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ์•ฑ์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ์ด๋งŒํ•œ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.


     

    ๋งˆ์ง€๋ง‰์œผ๋กœ

     

    Cocoa MVC ์—์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๋ ˆ์ด์–ด์— ํ•ด๋‹นํ•˜๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ญํ• ์ด ๋„ˆ๋ฌด ๋น„๋Œ€ํ•ด์ง€๊ณ , Testable ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

     

    ์ด๋Ÿฐ ๋‹จ์ ์— ๋Œ€ํ•œ ๊ฐœ์„ ์œผ๋กœ MVP ์™€ MVVM, VIPER ์™€ ๊ฐ™์€ ๋Œ€์•ˆ์ด ์ œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

     

    ๊ถ๊ธˆํ•˜์‹œ๋‹ค๋ฉด ๊ฒ€์ƒ‰์„ ํ†ตํ•ด์„œ ์ฐพ์•„๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

     

     

    ๋!


    ์ฐธ๊ณ ์ž๋ฃŒ 1: https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52

    ์ฐธ๊ณ ์ž๋ฃŒ 2: sungdoo.dev/programming/do-you-know-mvc

    ๋Œ“๊ธ€

์–ด์ œ๋ณด๋‹ค ๋ฐœ์ „ํ•œ ๋‚˜