Design Patterns #Section01 MVC(02) - Basic MVC vs Cocoa MVC

๐Ÿ“Œ MVC(01) - Model, View, Controller
๐Ÿ“Œ MVC(02) - Basic MVC vs Cocoa MVC

๐Ÿ–๏ธ Introduce

์ง€๋‚œ ๊ธ€์—์„œ MVC ๋””์ž์ธ ํŒจํ„ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ์ฒด๋“ค Model, View, Controller ๊ฐ๊ฐ์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค๋‹ค.
์ด๋ฒˆ ํŒŒํŠธ์—์„œ๋Š” Basic MVC ํŒจํ„ด๊ณผ Cocoa MVC ๋™์ž‘ ๋ฐฉ์‹์„ ํ™•์ธํ•˜๊ณ  ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

๐ŸŒฑ Basic MVC

๋‹น์—ฐํ•œ ๋ง์ด๊ฒ ์ง€๋งŒ MVC ํŒจํ„ด์€ iOS ๊ฐœ๋ฐœ์—๋งŒ ๊ตญํ•œ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.
๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” MVC ํŒจํ„ด์€ Composit, Strategy, Observer ํŒจํ„ด์œผ๋กœ ๊ตฌ์„ฑ๋œ Compound ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.

Composit pattern(View)

  • App์˜ View ๊ฐ์ฒด๋Š” ์‹ค์ œ๋กœ ์กฐ์งํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋Š” ์ค‘์ฒฉ๋œ View์˜ ๋ณตํ•ฉ์ฒด์ด๋‹ค.
  • Interface ๊ตฌ์„ฑ ์š”์†Œ๋“ค์€ Window๋ถ€ํ„ฐ Compound View๋‚˜ Individual View๊นŒ์ง€ ๋‹ค์–‘ํ•˜๋‹ค.

Strategy Pattern(Controller)

  • Controller ๊ฐ์ฒด๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ View ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • View ๊ฐ์ฒด๋Š” ์‹œ๊ฐ์  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๊ตญํ•œ๋˜๋ฉฐ, Inteface ๋™์ž‘ ๊ธฐ๋Šฅ์€ Controller์—๊ฒŒ ์œ„์ž„ํ•œ๋‹ค.

Observer Pattern(Model)

  • Model ๊ฐ์ฒด๋Š” App์—์„œ Model์˜ Data์— ๊ด€์‹ฌ์žˆ๋Š” ๊ฐ์ฒด(์ผ๋ฐ˜์ ์œผ๋กœ View๊ฐ์ฒด)์—๊ฒŒ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์ง€์†์ ์œผ๋กœ ์•Œ๋ ค์ค€๋‹ค.


Memory-structure image Basic MVC Diagram

์œ„ ๊ทธ๋ฆผ์€ Composit, Strategy, Observer ํŒจํ„ด์ด ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” Basic MVC ํŒจํ„ด์„ ๋„์‹ํ™”ํ•œ ๊ฒƒ์ธ๋‹ค.

  1. Composit Pattern์„ ์ ์šฉํ•œ View ๊ฐ์ฒด์—์„œ User Action์„ ํ†ตํ•ด Event๊ฐ€ ๋ฐฉ์ถœ๋œ๋‹ค.
  2. Controller ๊ฐ์ฒด๋Š” ํ•ด๋‹น Event๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ์„ค๊ณ„๋œ ๋กœ์ง์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    ์ด๋•Œ ํ•ด๋‹น Controller๋Š” Model์—๊ฒŒ Data ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•  ์ˆ˜๋„ ์žˆ๊ณ  View ๊ฐ์ฒด์— Interface ๋™์ž‘์ด๋‚˜ ๋ชจ์–‘์„ ๋ณ€๊ฒฝํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. Model ๊ฐ์ฒด๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ Observer๊ฐ€ ๋“ฑ๋ก๋œ ๋ชจ๋“  ๊ฐ์ฒด์—๊ฒŒ ์•Œ๋ฆฐ๋‹ค. ๋งŒ์•ฝ Oberver๊ฐ€ View ๊ฐ์ฒด๋ผ๋ฉด ๋‚ด์—ญ์— ๋”ฐ๋ผ Interface ๋ณ€๊ฒฝ์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๐ŸŒฑ Cocoa MVC

์‚ฌ์‹ค Basic MVC ๊ตฌ์กฐ์— ๊ธฐ๋ฐ˜ํ•œ App ์„ค๊ณ„๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค.
๋ฐ”์ธ๋”ฉ(Binding) ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ฉด Model์—์„œ ๋ฐฉ์ถœ๋œ Event๋ฅผ View์˜ Observer์— ์ „๋‹ฌํ•ด Model์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ˆ˜์‹ ํ•˜๋Š” MVC๊ธฐ๋ฐ˜ App์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ์œ„ ๋ฐฉ๋ฒ•์œผ๋กœ MVC ํŒจํ„ด์„ ์„ค๊ณ„ํ•˜๋ฉด View์™€ Model ๊ฐ์ฒด์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ฒŒ ๋œ๋‹ค.

  • View๋Š” App์— ์ •์˜๋œ ๋‚ด์šฉ(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)์„ OS๊ฐ€ ๋ณด๊ณ  ํ‘œํ˜„ํ•œ ๊ฐ์ฒด์ด๋‹ค.
    ๋”ฐ๋ผ์„œ OS์ž…์žฅ์—์„œ View ๊ฐ์ฒด๋Š” Interface์™€ ๊ธฐ๋Šฅ์— ์ผ๊ด€์„ฑ์ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋†’์€ ์ˆ˜์ค€์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ฐ€์งˆ ๊ฒƒ์„ ์š”๊ตฌํ•œ๋‹ค.
  • Model ๊ฐ์ฒด๋Š” ์ •์˜์— ์˜ํ•ด ํŠน์ • ์˜์—ญ์— ์—ฐ๊ด€๋œ Data๋ฅผ ์บก์Аํ™”ํ•˜๊ณ  ํ•ด๋‹น Data๋“ค์— ๋Œ€ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์„ค๊ณ„์ธก๋ฉด์—์„œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด View์™€ Model ๊ฐ์ฒด๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผํ•œ๋‹ค.


Cocoa MVC

Memory-structure image Cocoa MVC Diagram

๋Œ€๋ถ€๋ถ„์˜ Cocoa App์—์„œ Model์—์„œ ๋ฐฉ์ถœ๋œ Event๋“ค์€ Controller ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด View๋กœ ์ „๋‹ฌ๋œ๋‹ค.
๋˜ํ•œ Compound ํŒจํ„ด์— ๋”ํ•ด Controller๋Š” Mediator, View๋Š” Command ํŒจํ„ด์ด ์ถ”๊ฐ€๋กœ ํฌํ•จ๋œ๋‹ค.


ยฉ 2024. All rights reserved.

Powered by Hydejack v9.2.1