티스토리 뷰
MVC
Model, View, Controller 로 나누어 설계한 아키텍처 패턴 입니다.
구조
MVC의 구조를 그림으로 나타내면 아래와 같습니다.
- Model : 앱에 사용되는 데이터와 데이터를 가공하는 부분 입니다.
- View : 사용자에게 보여지는 화면 부분(UI) 입니다.
- Controller : 사용자의 입력(Action)을 받아 처리하는 부분 입니다.
동작 순서
MVC의 흐름은 아래와 같습니다.
- 모든 입력(Action)은 Controller에 전달 및 처리가 됩니다.
- Controller는 사용자의 Action을 확인 후, Model을 업데이트 합니다.
- Controller는 Model을 나타내줄 View를 선택합니다.
- View는 Model을 이용해 화면을 나타냅니다.
View가 업데이트 되는 방법
- View가 Model을 이용해 직접 업데이트
- Model에서 View에게 Notify 하여 업데이트
- View가 Polling을 통해 Model의 변화를 알아채고 스스로 업데이트
Controller는 Model을 조작하고 View를 선택하지만, View를 직접 업데이트 하진 않습니다.
(View는 Controller의 존재를 모름)
장점
MVC는 애플에서도 권고할 정도로 널리 사용되고 있는 패턴이라는 점에 맞게 가장 단순 하며,
보편적으로 많이 사용되는 디자인 패턴 입니다.
단점
View와 Model 사이의 의존성이 높다는 점입니다.
앱의 규모가 커질수록 복잡해지고, 유지보수가 어려워 집니다.
MVP
Model, View, Presenter를 합친 용어로, Model, View는 MVC 패턴과 동일 하며, Controller 대신 Presenter가 존재합니다.
구조
Presenter : View에서 요청한 정보로 Model을 가공해 View에 전달해 주는 부분 입니다.
View와 Model 사이의 중개자 역할을 합니다.
동작 순서
- 사용자의 Action들을 View에서 담당합니다.
- View는 데이터를 Presenter에 요청합니다.
- Presenter는 Model에게 데이터를 요청합니다.
- Model은 요청받은 데이터의 응답을 Presenter로 보냅니다.
- Presenter는 응답 데이터를 View에게 보냅니다.
- View는 응답 데이터를 화면에 보여줍니다.
장점
MVP의 장점은 View와 Model의 의존성이 없으며, MVC의 단점이었던 View와 Model의 의존성이 해결됩니다.
(다만, Presenter가 없으면 View, Model은 절대 못만남..ㅠ)
단점
View와 Presenter의 의존성이 높아집니다. (Presenter가 없어지면 아무것도 못함..)
MVVM
Model, View, ViewModel를 합친 용어로, Model, View의 역할은 다른 패턴과 동일 합니다.
구조
- ViewModel : View의 표현을 담당 하며, View를 나타내기 위한 데이터를 처리하는 부분이기도 합니다.
동작 순서
- 사용자의 Action들은 View로 전달됩니다.
- View에 Action이 들어오는걸 Command 패턴으로 ViewModel에 Action을 전달합니다.
- ViewModel은 Model에게 데이터를 요청합니다.
- Model은 ViewModel 에게 요청받은 데이터를 응답합니다.
- ViewModel은 응답 받은 데이터를 가공하여 저장합니다.
- View는 View Model과 Data Binding하여 화면을 나타냅니다.
장점
View와 Model 사이의 의존성이 없습니다.
MVVM패턴은 Command 패턴, Data Binding 을 사용하여 구현이 되어있습니다.
이 두가지를 이용하여 View와 ViewModel 사이의 의존성을 없애고, 각각의 부분이 독립적이기 때문에 모듈화 하여 개발할 수 있습니다.
단점
설계가 어렵습니다..
MVC, MVP, MVVM 패턴에 대해 이론적으로 공부를 해봤는데요.
요즘 많은 기업들이 사용하는 MVVM 패턴은 꼭 적용해서 사용해봐야 될것 같습니다.
gitHub에 여러 예제들을 참고해보면서 공부해보고 포스팅 꼭 해보겠습니다.
참고
1. https://beomy.tistory.com/43
2. https://bit3rd.tistory.com/entry/MVC
'iOS' 카테고리의 다른 글
[iOS] SceneDelegate 란? (feat. LifeCycle) (0) | 2022.05.11 |
---|---|
[Swift] enumerated() 메소드 (0) | 2022.05.08 |
[iOS] TableView (programmatically) (3) | 2022.05.04 |
[iOS] TextField 앞 뒤로 공백 있을시 제거 - trimmingCharacters(in:) (0) | 2022.05.01 |
[Swift] 초기화 (Initialization) 3/3 - init?, init!, required init (0) | 2022.04.29 |
- Total
- Today
- Yesterday
- Swift 알고리즘
- CS 네트워크
- RIBs tutorial
- Swift RIBs
- swift property
- Swift final
- swift programmers
- Swift Leetcode
- 2023년 회고
- ios
- Swift joined
- swift reduce
- Swift joined()
- RTCCameraVideoCapturer
- iOS error
- swift protocol
- Swift ModernRIBs
- Swift Error Handling
- Swift inout
- Swift init
- Class
- Swift 프로퍼티
- swift (programmers)
- 원티드 프리온보딩
- Swift 프로그래머스
- Combine: Asynchronous Programming with Swift
- Swift
- Swift 내림차순
- removeLast()
- swift 고차함수
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |