-
iOS 앱 개발 디자인 패턴 / MVC, MVP, MVVM, RIBsios 2021. 8. 2. 13:22
iOS 앱 개발에 쓰이는 디자인 패턴 정리
MVC, MVP, MVVM, RIBs 외에도 VIP, VIPER 등이 있지만
구인공고에서 요구하는 스킬과 우대사항에선 MVC, MVP, MVVM, RIBs 이 많이 보여 넷만 정리
MVC - Model View Controller
입력에 대한 처리와, 처리에 필요한 Model과, View의 관리 등 대부분의 처리를 Controller가 담당한다.
( 작은 규모라면 괜찮겠지만, 규모가 커질 수록 Controller가 커져 MVC가 Massive ViewController 가 된다고 한다. )
그러나, 역할에 따라 MVC로 구분한 것은 좋았지만
C에 비즈니스 로직과 화면을 그리는 UI 관련 코드가 섞여 테스트가 어렵고, C가 과도하게 커져
MVP 라는 개념이 생긴다.
MVP - Model View Presenter
흐름
- 입력이 들어오면, View는 1대1 관계의 Presenter에 전달한다.
- Presenter는 입력에 따른 처리를 하고 이에 필요한 Model을 사용한다. ( input 처리 - P )
- 처리가 끝나고, Presenter는 어떤 요소를 그릴 지 View에 전달한다. ( output 지시 - P )
- View는 Presenter에게 받은 내용에 따라 화면을 그린다. ( UI 처리 - V )
이렇게 Presenter는 UI 처리와는 구분이 되어 비즈니스 로직만 갖게 되어 MVC에 비해 유닛 테스트가 쉬워졌다.
그러나, View와 Presenter 사이의 의존성이 있으며, 비슷한 View 들인데도 Presenter가 각각 필요했다.
( 비슷한 화면과 로직이지만 input, output이 달라져야 하기에 V-P 는 1대1의 관계를 이룬다. )
그래서, input을 공통으로 처리하지만, output에는 관여하지 않으며,
View에 사용될 Model을 다룬다는 개념의 ViewModel이 등장한다.
MVVM - Model View ViewModel
흐름
- 입력이 들어오면, View는 ViewModel에 들어옴을 알린다.
- ViewModel은 Model을 이용, 비즈니스 로직을 통해 View에 쓰일 ViewModel을 만든다.
* Presenter와 달리, 이후 output과 관련해서 View에 어떠한 지시를 내리지 않는다. 데이터만 처리
- ViewModel에서 데이터가 처리되면, View는 지켜보다 데이터를 가져와 화면을 그린다.
* 여기서 View가 데이터의 처리와 변경을 확인하는 데에 데이터 바인딩 이 사용된다.
* 데이터 바인딩은 다용한 방법으로 구현할 수 있지만, RxSwift로 많이 구현함.
V - 입력을 ViewModel에 알리고, 처리를 지켜보다 완료되면 UI 처리를 한다.
VM - 입력이 오면 Model을 이용해 비즈니스 로직 수행. ( UI와 분리되어 데이터만 다루기에 테스트 용이 )
뷰모델에는 뷰를 나타나는 데 필요한 상태(데이터) 와 뷰에 들어오는 input이 정의되어 들어있다.
뷰모델에는 UI 로직을 제외한 비즈니스 로직만이 들어있다.
데이터 바인딩을 통해 뷰모델은 뷰를 모르는 구조가 되어, 뷰로부터 독립적이게 됐다.RIBs - Router, Interactor, Builder
생소한 디자인 패턴이다...
잘 설명해주신 제드님 링크 첨부
https://zeddios.tistory.com/937
단방향 아키텍처 ReactorKit, TCA (The Composable Architecture)
데이터의 흐름이 단방향인 아키텍처들이 인기가 많아진 것 같다.
큰 공통점은
- 상태 관리 기반이며
- 테스트에 용이하고- 프레임워크 처럼
개발자가 코드를 정형화된 틀에서 작성하도록 한다.
특히나, ReactorKit은 정형화 된 MVVM이라 느껴지고 사용하는 기업도 꽤 많이 보인다.
( MVVM을 구현하는 방식과 디테일은 사람 마다, 회사 마다 등 천차만별인 점이 있다.. )https://github.com/ReactorKit/ReactorKit
https://github.com/pointfreeco/swift-composable-architecture#what-is-the-composable-architecture
참고 영상 : 유튜브 곰튀김 채널 영상
'ios' 카테고리의 다른 글
Stack View 활용 expandable, collapsable 테이블뷰 구현 (0) 2022.01.13 CollectionView 활용, 선택 이미지 추가 및 제거 (0) 2022.01.13 todo-ios (0) 2021.07.05 오토레이아웃 컨스트레인트 우선순위 (0) 2021.06.04 scroll view (0) 2021.06.03