ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] MVC (Model-View-Controller)
    iOS 2022. 3. 17. 02:07

    MVC๋ž€?

    MVC๋Š” ๋‹ค์Œ 3๊ฐ€์ง€ ์ฃผ์š” ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํŒจํ„ด์ด๋‹ค.

    https://blog.kakaocdn.net/dna/SLidm/btrpox8LFw3/AAAAAAAAAAAAAAAAAAAAAMW8yVO3yw5LAXMVEVR41VMNXk9TNi7byH0jL5BZxo04/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1772290799&allow_ip=&allow_referer=&signature=DdSFUZs7GuA9F1xZ4iOToD4ddAg%3D

    Model

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์บก์Аํ™”ํ•˜๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง๊ณผ ๊ณ„์‚ฐ์„ ์ •์˜ํ•œ๋‹ค.

    View

    ์•ฑ์˜ ๋ทฐ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.

    Controller

    delegate ํŒจํ„ด์„ ํ†ตํ•ด ํ•˜๋‚˜ ์ด์ƒ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ View ๊ฐ์ฒด์™€ ํ•˜๋‚˜ ์ด์ƒ์˜ Model ๊ฐ์ฒด ์‚ฌ์ด์˜ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•œ๋‹ค.

     

    Model, View, Controller์€ ์„œ๋กœ ์˜์กดํ•˜์ง€ ์•Š๊ณ  Loosely Coupled ๋˜์–ด์žˆ๋‹ค. ์ด๋Š” ์ฆ‰ Model, View, Controller๊ฐ€ ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ, ์ฝ”๋“œ ๊ตฌ์„ฑ์ด ๊ฐ„๋‹จํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค. ๋ชจ๋ธ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ๋ทฐ์˜ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    Model-View-Controller ๋™์ž‘ ์ˆœ์„œ

    1๏ธโƒฃ View๊ฐ€ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ ๋ฐ›์Œ

    2๏ธโƒฃ View์˜ ์ด๋ฒคํŠธ๋ฅผ Controller์—๊ฒŒ ์•Œ๋ฆผ

    3๏ธโƒฃ Controller๋Š” Model์—๊ฒŒ ๋ฐ์ดํ„ฐ ์š”์ฒญ

    4๏ธโƒฃ Model์€ Controller์—๊ฒŒ ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

    5๏ธโƒฃ Controller๋Š” View์—๊ฒŒ ํ‘œ์‹œํ•  ๋‚ด์šฉ ์ „๋‹ฌ

    6๏ธโƒฃ View๋Š” Controller๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ View์— ํ‘œ์‹œ

     

    1. Model

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์บก์Аํ™”ํ•˜๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง๊ณผ ๊ณ„์‚ฐ์„ ์ •์˜ํ•œ๋‹ค.
    • ํ•˜๋‚˜์˜ Model ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ Model ๊ฐ์ฒด์™€ 1:1 ๋˜๋Š” 1:๋‹ค ๋Œ€์‘ ๊ด€๊ณ„๋ฅผ ๋งบ์„ ์ˆ˜ ์žˆ๋‹ค.
    • Model ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฅผ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” View ๊ฐ์ฒด์— ๋ช…์‹œ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ํ‘œ์‹œ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†์–ด์•ผ ํ•œ๋‹ค.
    • persistence, model objects, parsers, managers, networking code ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค.
      • Network Code
        • ์ „์ฒด ์•ฑ์˜ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์—๋Š” ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
        • ์ด๋ฅผ ํ†ตํ•ด HTTP ํ—ค๋”, ์‘๋‹ต๊ณผ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๋ชจ๋“  ๋„คํŠธ์›Œํฌ ์š”์ฒญ์— ๊ณตํ†ต๋˜๋Š” ๊ฐœ๋…์„ ์‰ฝ๊ฒŒ ์ถ”์ƒํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • Persistence Code
        • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ Core Data ๋˜๋Š” ์žฅ์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
      • Parsing Code
        • ๋„คํŠธ์›Œํฌ ์‘๋‹ต์„ ํŒŒ์‹ฑํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ชจ๋ธ์— ํฌํ•จ์‹œ์ผœ์•ผํ•œ๋‹ค.
        • Swift ๋ชจ๋ธ ๊ฐ์ฒด์—์„œ๋Š” JSON ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์‹ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์ด ๋ชจ๋ธ ๊ฐ์ฒด์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค.
      • Managers and abstraction layers/classes
        • ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค ๊ฐ„์˜ ์ ‘์ฐฉ์ œ ์—ญํ• ์„ ํ•˜๋Š” ์ „ํ˜•์ ์ธ “๊ด€๋ฆฌ์ž” ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค.
        • ํ•˜์œ„ ๋ ˆ๋ฒจ์˜ API์— ๋Œ€ํ•œ wrapper ์—ญํ• ์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. iOS์˜ ํ‚ค์ฒด์ธ wrapper, notification์— ๋„์›€์ด ๋˜๋Š” ํด๋ž˜์Šค, Health Kit์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋„์›€ ๋œ๋‹ค.
      • Data sources and delegates
        • ๋ชจ๋ธ ๊ฐ์ฒด๊ฐ€ ํ…Œ์ด๋ธ”๋ทฐ๋‚˜ ์ปฌ๋ ‰์…˜๋ทฐ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์˜ data source ๋˜๋Š” delegate๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๋‹ค.
      • Constants
        • ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
      • Helpers and extensions
        • ํ”„๋กœ์ ํŠธ์—์„œ string, collection ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ์ด ๋˜ํ•œ ๋ชจ๋ธ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.
    ๐Ÿ’ก ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋ทฐ ๊ณ„์ธต์—์„œ์˜ ์‚ฌ์šฉ์ž ์ž‘์—…์€ Controller ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜๊ณ  Model ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. Model ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด (์˜ˆ: ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ƒˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์‹ ๋จ) Controller ๊ฐ์ฒด์— ํ†ต๋ณดํ•˜์—ฌ ์ ์ ˆํ•œ View ๊ฐ์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

    2. View

    • ์•ฑ์˜ ๋ทฐ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.
    • ์ž์‹ ์ด ๋ณด์—ฌ์ง€๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๊ณ  ์‚ฌ์šฉ์ž ์•ก์…˜์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ๋•Œ ๋ทฐ ๊ณ„์ธต๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•œ๋‹ค.
    • ๋„๋ฉ”์ธ๋ณ„ ๋กœ์ง์„ ํฌํ•จํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
      • UILabel์˜ ๊ฒฝ์šฐ, ํ™”๋ฉด์— ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ทฐ์ด๋ฉฐ ์žฌ์‚ฌ์šฉ ๋ฐ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • View ๊ฐ์ฒด์˜ ์ฃผ์š” ๋ชฉ์ ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Model ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , View ๊ฐ์ฒด๋Š” MVC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Model ๊ฐ์ฒด์™€๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ๋‹ค. ์ฃผ์†Œ๋ก์„ ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ „ํ™”๋ฒˆํ˜ธ ๋ฐ ์ •๋ณด๊ฐ€ ๋ณด์ด๋Š” ํ™”๋ฉด๋“ค์„ ๋งํ•œ๋‹ค.

    View ์ฒดํฌ๋ฆฌ์ŠคํŠธ

    โœ”๏ธ ๋ชจ๋ธ ๊ณ„์ธต๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”๊ฐ€?

    โœ”๏ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”๊ฐ€?

    โœ”๏ธ UI์™€ ๊ด€๊ณ„ ์—†๋Š” ์กฐ์ž‘์„ ์‹œ๋„ํ•˜๋Š”๊ฐ€?

     

    ์œ„ ์งˆ๋ฌธ๋“ค ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด, ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

    ๐Ÿ’ก View ๊ฐ์ฒด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Controller ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด Model ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”๋ฅผ ํ•™์Šตํ•˜๊ณ , ์‚ฌ์šฉ์ž์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ(์˜ˆ: ํ…์ŠคํŠธ ํ•„๋“œ์— ์ž…๋ ฅ๋œ ํ…์ŠคํŠธ)์„ Controller ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Model ๊ฐ์ฒด์— ์ „๋‹ฌํ•œ๋‹ค.

    3. Controller

    • ์ปจํŠธ๋กค๋Ÿฌ๋Š” delegate ํŒจํ„ด์„ ํ†ตํ•ด ํ•˜๋‚˜ ์ด์ƒ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ View ๊ฐ์ฒด์™€ ํ•˜๋‚˜ ์ด์ƒ์˜ Model ๊ฐ์ฒด ์‚ฌ์ด์˜ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•œ๋‹ค.
    • Controller ๊ฐ์ฒด๋Š” View ๊ฐ์ฒด๊ฐ€ Model ๊ฐ์ฒด์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ , ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๋งค๊ฐœ์ฒด๊ฐ€ ๋œ๋‹ค.
    • ๋„๋ฉ”์ธ๋ณ„ ๊ทœ์น™๊ณผ ๊ด€๋ จ๋œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์•ฑ์—์„œ ๊ฐ€์žฅ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ ์€ ๋ถ€๋ถ„์ด๋‹ค.
    • ๋ชจ๋ธ ๊ฐ์ฒด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์˜ ์ •๋ณด ํ๋ฆ„์„ ์ •์˜ํ•œ๋‹ค.
    • ์ด์ƒ์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š” ๊ตฌ์ฒด์ ์ธ ๋ทฐ๋ฅผ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋Œ€์‹ , ํฌ๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ถ”์ƒ ํƒ€์ž…๊ณผ ํ†ต์‹ ํ•œ๋‹ค.
      • ์˜ˆ๋ฅผ ๋“ค๋ฉด UITableView๊ฐ€ UITableViewDataSource ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
    • Controller ๊ฐ์ฒด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ • ๋ฐ ์กฐ์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์˜ ์ƒ๋ช… ์ฃผ๊ธฐ(Life cycle)๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
    • ์‹œ์ž‘, ๋ฐ์ดํ„ฐ ๋กœ๋“œ ํŠธ๋ฆฌ๊ฑฐ, UI ์ƒํ˜ธ ์ž‘์šฉ ์ฒ˜๋ฆฌ, UI์™€ ๋ชจ๋ธ ๊ฐ„์˜ ์กฐ์ • ๋“ฑ์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • Cocoa Touch ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Coordinating Controller, View Controller (iOS), Mediating Controller (OS X)์˜ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์ปจํŠธ๋กค๋Ÿฌ ์œ ํ˜•์„ ์ œ๊ณตํ•œ๋‹ค.

    Controller ์ฒดํฌ ๋ฆฌ์ŠคํŠธ

    โœ”๏ธ persistence์™€ network ์ค‘ ์–ด๋–ค ๊ฒƒ์— ๋จผ์ € ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

    โœ”๏ธ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์•ฑ์„ ๊ฐฑ์‹ ํ•ด์•ผํ•˜๋Š”๊ฐ€?

    โœ”๏ธ ๋‹ค์Œ ํ™”๋ฉด์€ ๋ฌด์—‡์ด๋ฉฐ, ์–ด๋–ค ์ƒํ™ฉ์—์„œ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€?

    โœ”๏ธ ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋„˜์–ด๊ฐ€๋ฉด ๋ฌด์—‡์„ ์ •๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

    โœ”๏ธ ์‚ฌ์šฉ์ž๊ฐ€ ์…€์„ ํƒญํ•œ ๋‹ค์Œ์˜ ์ž‘์—…์€ ๋ฌด์—‡์ธ๊ฐ€?

    ๐Ÿ’ก Controller ๊ฐ์ฒด๋Š” View ๊ฐ์ฒด์—์„œ ๋ฐœ์ƒ๋œ ์‚ฌ์šฉ์ž ๋™์ž‘ ๋ฐ ์˜๋„ (์‚ฌ์šฉ์ž์˜ ๋ฒ„ํŠผ ํด๋ฆญ ๋˜๋Š” ํ…์ŠคํŠธ ์ž…๋ ฅ)๋ฅผ ํ•ด์„ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ๋˜๋Š” ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Model ๊ฐ์ฒด๋กœ ์ „๋‹ฌํ•œ๋‹ค. Model ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด Controller ๊ฐ์ฒด๊ฐ€ ์ƒˆ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒˆ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ View ๊ฐ์ฒด์— ์ „๋‹ฌํ•œ๋‹ค.

    3-1. Coordinating Controllers

    Coordinating Controller๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด ๋˜๋Š” ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ๊ฐ๋…ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ณ„๋กœ ๋‹ค๋ฅธ ๋กœ์ง์ด ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ฃผ์ž…(injected)๋˜๋Š” ์žฅ์†Œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    • ๋ธ๋ฆฌ๊ฒŒ์ด์…˜(delegation) ๋ฉ”์‹œ์ง€์— ์‘๋‹ตํ•˜๊ณ  ์•Œ๋ฆผ(notifications)์„ ๊ด€๋ฆฌ
    • ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ๊ณผ ๊ฐ™์€ ์ปจํŠธ๋กค์„ ํƒญํ•˜๊ฑฐ๋‚˜ ํด๋ฆญํ•จ์— ๋”ฐ๋ผ ์ „์†ก๋˜๋Š” ๋™์ž‘ ๋ฉ”์‹œ์ง€(action message)์— ์‘๋‹ต
    • ๊ฐ์ฒด ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ํ™•๋ฆฝ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์™€ ๊ฐ™์€ ๊ธฐํƒ€ ์„ค์ • ์ž‘์—… ์ˆ˜ํ–‰
    • ์†Œ์œ ํ•œ "owned" ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ ๊ด€๋ฆฌ

    iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” View Controller๊ฐ€ Coordinating Controller์˜ ์—ญํ• ์„ ๊ฒธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

    3-2. View Controllers

    • UIKit์—์„œ View Controller๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋Š” ๋ทฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ํ•ด๋‹น ๋ทฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ(reference)๋ฅผ ์œ ์ง€ํ•˜๊ณ , View Controller๋Š” ์ด ๋ทฐ์˜ ํ‘œ์‹œ(presentation)์™€ ํ›„์† ๋ทฐ๋กœ์˜ ์ „ํ™˜(transition)์„ ๊ด€๋ฆฌํ•œ๋‹ค. ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”, ํƒญ ๋ฐ” ๊ทธ๋ฆฌ๊ณ  ์ด์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋™์ž‘์€ View Controller ๊ฐ์ฒด์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๊ณ  ๊ตฌํ˜„๋œ๋‹ค. ๋˜ํ•œ, Modal View๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ๊ฒฝ๊ณ ์— ์‘๋‹ตํ•˜๋ฉฐ ๊ธฐ๊ธฐ์˜ ๋ฐฉํ–ฅ(orientation)์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ทฐ๋ฅผ ํšŒ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
    • iOS์˜ View Controller๋Š” UIViewController์˜ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค. UIKit์€ UITableViewController์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ํŠน์ˆ˜ ๋ชฉ์ ์˜ UIViewController ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. Controller๊ฐ€ Model๊ณผ View ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๊ฐœํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ํ”„๋ ˆ์ž„์›Œํฌ์˜ View-Controller ํด๋ž˜์Šค(์˜ˆ : UIViewController, UITableViewController ๋“ฑ)๋ฅผ ํ™•์žฅํ•ด์•ผํ•œ๋‹ค. View Controller๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์œ„์ž„์ž ๋˜๋Š” ๋ฐ์ดํ„ฐ ์›๋ณธ ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

     

    MVC ์žฅ์ 

    • Loosely Coupled - ๋А์Šจํ•œ ๊ฒฐํ•ฉ
    • Removes unnecessary dependencies - ๋ถˆํ•„์š”ํ•œ ์ข…์†์„ฑ ์ œ๊ฑฐ
    • Reusable without modification - ์ˆ˜์ • ์—†์ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • Code reuse - ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ
    • Extendable code - ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ
    • High Cohesion - ๋†’์€ ์‘์ง‘๋ ฅ
    • Easier to maintain or modify - ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ์ˆ˜์ •์ด ์šฉ์ด
    • Supports multiple views - ์—ฌ๋Ÿฌ ๋ทฐ ์ง€์›
    • Each part can be tested independently (Model, View, Controller) - ๊ฐœ๋ณ„์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

    MVC ํ•œ๊ณ„

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ๋‹ค์ˆ˜์˜ ๋ทฐ์™€ ๋ชจ๋ธ์ด ํ•˜๋‚˜์˜ ์ปจํŠธ๋กค๋Ÿฌ์— ์—ฐ๊ฒฐ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ, ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค์ง€๊ฒŒ ๋˜๋Š”๋ฐ ์ฝ”๋“œ ๋ถ„์„/์ˆ˜์ •๊ณผ ํ…Œ์ŠคํŠธ๊ฐ€ ํž˜๋“ค์–ด์ง€๊ณ , Model๊ณผ View๊ฐ€ ๋ณต์žกํ•˜๊ฒŒ ์—ฎ์—ฌ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ Massive-View-Controller๋ผ๊ณ  ํ•œ๋‹ค.
    • ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์–‘ํ•œ ํŒจํ„ด (MVP, MVVM ๋“ฑ)์ด ํŒŒ์ƒ๋˜์—ˆ๋‹ค.

     

    ์ฐธ๊ณ  ๋งํฌ

    Model-View-Controller

    Model-View-Controller (MVC) in iOS - A Modern Approach

    MVC-Architecture-in-5-minutes

    ๋Œ“๊ธ€

Designed by Tistory.