πŸ§‘πŸ»‍πŸ’» iOS 개발/iOS

[Design Pattern] MVC pattern (Model View Controller)

barosalki 2021. 1. 14. 01:10

ν•΄λ‹Ή κ²Œμ‹œκΈ€μ€ 개인적인 곡뢀λ₯Ό μ •λ¦¬ν•œ κ²ƒμœΌλ‘œ λΆ€μ‘±ν•œ 뢀뢄이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.


MVC design pattern

MVC λ””μžμΈμ€ κ°€μž₯ 널리 μ•Œλ €μ§„ μ†Œν”„νŠΈμ›¨μ–΄ λ””μžμΈ νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œμ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ Model - View - Controller μ„Έ κ°€μ§€μ˜ 파트둜 λ‚˜λˆ„μ–΄ λ‹€λ£Ήλ‹ˆλ‹€. MVC νŒ¨ν„΄μ˜ 핡심은 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 λ³΄μ—¬μ§€λŠ” λ ˆμ΄μ–΄(UI)λ₯Ό λΆ„λ¦¬ν•˜μ—¬ μ‹œκ°μ  μš”μ†Œμ™€ κ·Έ μ΄λ©΄μ—μ„œ μ‹€ν–‰λ˜λŠ” λ‘œμ§μ„ μ„œλ‘œμ˜ 영ν–₯ 없이 μ‰½κ²Œ μˆ˜μ •μ΄ κ°€λŠ₯ν•˜κ²Œλ” ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 

Model (λͺ¨λΈ)

λͺ¨λΈμ€ 이 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 무슨 일을 ν•˜λŠ”μ§€λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 데이터 베이슀, μ•Œκ³ λ¦¬μ¦˜, 둜직 등이 λͺ¨λΈμ΄ λ©λ‹ˆλ‹€. λͺ¨λΈ μ•ˆμ˜ 데이터가 변경될 경우 직접 μ»¨νŠΈλ‘€λŸ¬μ—κ²Œ 값을 μ „λ‹¬ν•˜λŠ” 것이 μ•„λ‹Œ λΈŒλ‘œλ“œμΊμŠ€νŒ… (Noticication or KVO: Key Value Observing) 방식을 μ‚¬μš©ν•˜μ—¬ λ³€ν™”λ₯Ό μ•Œλ¦½λ‹ˆλ‹€.

View (λ·°)

λ·°λŠ” μœ μ €κ°€ λͺ¨λΈμ˜ 데이터λ₯Ό λ³Ό 수 μžˆκ²Œλ” ν•©λ‹ˆλ‹€. μ»¨νŠΈλ‘€λŸ¬μ— 쒅속적이며 ν…μŠ€νŠΈ, λ²„νŠΌ , 차트 λ“± μ‚¬μš©μž UIλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. λ·°λŠ” μžμ‹ μ΄ 좜λ ₯ν•˜κ³  μžˆλŠ” 데이터λ₯Ό μ†Œμœ  ν•  수 μ—†κ³  μ»¨νŠΈλ‘€λŸ¬μ—κ²Œ 항상 μš”μ²­ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ·°μ—μ„œ μ‚¬μš©μž μž…λ ₯μ΄λ‚˜ λ³€ν™”κ°€ 생기면 Action을 μ»¨νŠΈλ‘€λŸ¬μ—κ²Œ Target에 λ§žμΆ”μ–΄ λ³΄λƒ…λ‹ˆλ‹€. λ˜ν•œ λ·°λŠ” μ»¨νŠΈλ‘€λŸ¬μ™€ 동기화 ν•˜κΈ°μœ„ν•΄μ„œ 미리 μ •μ˜λœ delegate λ©”μ†Œλ“œλ₯Ό 톡해 μ»¨νŠΈλ‘€λŸ¬μ™€ μž…λ ₯에 λŒ€ν•œ λ‹€μŒ λ™μž‘μ— λŒ€ν•΄ μ†Œν†΅ν•©λ‹ˆλ‹€. 뷰의 Datasource λ©”μ†Œλ“œλŠ” μ»¨νŠΈλ‘€λŸ¬μ—κ²Œ 데이터λ₯Ό μš”μ²­ν•΄μ„œ λ·°μ—μ„œ λ³΄μ—¬μ§ˆ 데이터λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

Controller (컨트둀러)

뷰와 λͺ¨λΈμ„ κ΄€λ¦¬ν•˜λ©° λ·°λ‘œλΆ€ν„° λ“€μ–΄μ˜¨ μ‚¬μš©μžμ˜ μš”μ²­μ„ λ°›μ•„ λͺ¨λΈμ΄ μ–΄λ–»κ²Œ 처리 ν• μ§€λ₯Ό μ•Œλ €μ£ΌλŠ” 역할이며, λ·°λ₯Ό μœ„ν•΄ λͺ¨λΈμ˜ 데이터λ₯Ό ν•΄μ„ν•˜κ³  μ–΄λ–»κ²Œ λͺ¨λΈμ΄ UI둜 ν‘œν˜„λ μ§€λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. μ‚¬μš©μžμ˜ μš”μ²­ λ‚΄μš©μ„ λΆ„μ„ν•΄μ„œ λͺ¨λΈκ³Ό 뷰에 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. λͺ¨λΈμ˜ λ³€ν™”λ₯Ό μˆ˜μ‹ ν•˜μ—¬ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

M - V - C κ°„μ˜ μ†Œν†΅

  • 일반적인 경우 뷰와 λͺ¨λΈμ€ 무쑰건 컨트둀러λ₯Ό κ±°μ³μ„œ μ†Œν†΅ν•©λ‹ˆλ‹€.

  • μ»¨νŠΈλ‘€λŸ¬λŠ” λͺ¨λΈκ³Ό λ·°λ₯Ό ν†΅μ œν•©λ‹ˆλ‹€.

  • 뷰의 객체듀은 μ»¨νŠΈλ‘€λŸ¬μ— λŒ€ν•΄ μ•Œμ§€ λͺ»ν•˜κ³  λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ μ»¨νŠΈλ‘€λŸ¬μ™€ μ†Œν†΅ν•©λ‹ˆλ‹€. 

MVC design pattern 의 μž₯점

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ½”λ“œλ₯Ό μ„Έ κ°€μ§€ κΈ°λŠ₯에 λ§žμΆ”μ–΄ λΆ„λ¦¬ν•˜κ³  κ°œλ°œν•˜κΈ° λ•Œλ¬Έμ— λ™μ‹œ 개발이 κ°€λŠ₯ν•˜λ©° μœ μ§€ 보수, ν™•μž₯μ„±, μ½”λ“œμ˜ μž¬μ‚¬μš© 등이 μ‰¬μ›Œμ§‘λ‹ˆλ‹€. 

MVC design pattern의 ν•œκ³„

보톡 μ΄λŸ¬ν•œ μ—¬λŸ¬ MVCκ°€ λͺ¨μ—¬μ„œ ν•˜λ‚˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ˜λŠ”λ° λ§Œμ•½ ν™”λ©΄ ꡬ성과 데이터 ꡬ성이 λ³΅μž‘ν•΄μ§ˆ 경우 경우 ν•˜λ‚˜μ˜ μ»¨νŠΈλ‘€λŸ¬μ— λ‹€μˆ˜μ˜ λͺ¨λΈκ³Ό λ·°κ°€ μ—°κ²°λ˜λŠ” 상황이 μƒκΉλ‹ˆλ‹€. 이럴 경우 μ½”λ“œμ˜ μž¬μ‚¬μš©κ³Ό μˆ˜μ •μ΄ μƒλ‹Ήνžˆ μ–΄λ €μ›Œμ§€κ²Œ λ©λ‹ˆλ‹€.


마무리 & Reference

λ‹€μŒ ν¬μŠ€νŒ…μ—μ„œ Delgate , DataSource, KVO, noticification 방식을 κ³΅λΆ€ν•˜λ©° 더 μžμ„Ένžˆ λ‹€λ€„λ³΄κ² μŠ΅λ‹ˆλ‹€.