์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[ Architecture ] MVC ํŒจํ„ด

๐ŸŽ iOS/Patterns & Arch

by AHN.Jihyeon 2024. 6. 14. 17:56

๋ณธ๋ฌธ

 

๐Ÿ”Ž  1 . Model, View, Controller


Model

๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(ํ™”๋ฉด๊ณผ ๊ด€๋ จ์ด ์—†๋Š” ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ๊ด€๋ จ)

Model์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด Controller์— ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด KVO, Delegate ํŒจํ„ด, Notification Center ๋“ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด, ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๋Š” ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•œ๋‹ค. 

 

view

๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ช…๋ น์„ ๋ฐ›์•„ UI ์š”์†Œ๋“ค์„ ์‚ฌ์šฉ์ž ํ™”๋ฉด ํ‘œ์‹œํ•˜๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋‹ด๋‹น.

view๋Š” Model์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์ด๋‹ค. 

 

Controller๋Š” View์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” action์— ๋Œ€ํ•œ target์„ ๋งŒ๋“ค์–ด๋‘”๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด View๋Š” ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ Controller์— ์ „๋‹ฌํ•œ๋‹ค.

View์—์„œ ์œ ์ €์˜ action์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ Controller์— ์žˆ๋Š” target์ด ์ด๋ฅผ ๋ฐ›์•„๋“ค์ด๊ณ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

๋˜ํ•œ View๋Š” delegate ํŒจํ„ด์˜ delegate์™€ datasource๋ฅผ ์ด์šฉํ•˜์—ฌ Controller์—๊ฒŒ ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š”์ง€ ์•Œ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ UITableView์˜ UITableViewDelegate์™€ UITableViewDatasource๋ฅผ ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 

controller

Controller๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์•„ Model์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ , Model์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ View์— ๋ฐ˜์˜ํ•œ๋‹ค. 

Controller๋Š” Model๊ณผ View์— ์ง์ ‘ ์ง€์‹œ๋ฅผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Model๊ณผ View๋Š” Controller์— ์ง์ ‘์ ์œผ๋กœ ์•Œ๋ฆด ์ˆ˜ ์—†๋‹ค.

 

 

 

 

 

 

๐Ÿ”Ž  2. MVC ํŒจํ„ด์˜ ๋‹จ์ 


 

๊ฐ•ํ•œ ๊ฒฐํ•ฉ๋„ (Tight Coupling):

Controller๊ฐ€ View์˜ Life Cycle๊นŒ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— View์™€ Controller๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

์ด๋Š” ๋…๋ฆฝ์ ์ธ ํ…Œ์ŠคํŠธ์™€ ์žฌ์‚ฌ์šฉ์ด ์–ด๋ ต๋‹ค.

UI ๋ณ€๊ฒฝ ์‹œ Controller ์ˆ˜์ •์„ ํ•ด์•ผ ํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ณ€๊ฒฝ ์‹œ View ์ˆ˜์ •์„ ํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค.

 

 

์œ ์ง€๋ณด์ˆ˜์„ฑ ๊ฐ์†Œ (Reduced Maintainability):

์ฝ”๋“œ๊ฐ€ ์ปค์ง€๋ฉด Controller์— ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์ง‘์ค‘๋˜๋ฉด์„œ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค. ์ด๋Š” ์œ ์ง€๋ณด์ˆ˜์™€ ๋””๋ฒ„๊น…์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค.

 

 

์žฌ์‚ฌ์šฉ์„ฑ ๋ฌธ์ œ (Reusability Issues):

View์™€ Controller์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์œผ๋กœ ์ธํ•ด View๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋‚˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

๋‹ค์–‘ํ•œ View๊ฐ€ ๋™์ผํ•œ Controller๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ํž˜๋“ค๋‹ค.

 

 

Massive View Controller (MVC Anti-pattern):

๋งŽ์€ ์ฝ”๋“œ๊ฐ€ Controller์— ์ง‘์ค‘๋˜์–ด Controller๊ฐ€ ๋น„๋Œ€ํ•ด์ง€๊ณ  ๋ณต์žกํ•ด์ง„๋‹ค. ์ด๋Š” ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด View์™€ Controller ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

Delegate ํŒจํ„ด, Notification Center, KVO ๋“ฑ์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

๐Ÿ”— Reference 

https://velog.io/@zooneon/iOS-MVC-%ED%8C%A8%ED%84%B4%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

 

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ