본문 바로가기

IT/Swift

[swift] Architecture mvc/mvp/mvvm/viper/vip 비교

Apple’s MVC

  • Model : 프로그램에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리하는 부분
  • View : 사용자에게 제공되어 보여지는 UI 부분
  • Controller : 사용자의 입력을 받고 처리하는 부분

 

  • Distribution : View 와 Controller가 붙어있다.
  • Testability : Model만 테스트 가능하다.
  • Ease of use : 코드가 적게 든다, 쉽게 접근 가능 하다, 유지보수가 힘들다.

 

 

 

 

MVP

  • Model : 프로그램에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리하는 부분
  • View : 사용자에게 제공되어 보여지는 UI 부분
  • Presenter : View에서 요청한 정보를 Model로 부터 가공해서 View로 전달하는 부분

 

  • Distribution : Presenter와 Model이 분리됨
  • Testability : View의 재사용이 가능, 테스트 용이
  • Ease of use : MVC 대비 코드 양이 2배, 코드가 명료해짐

 


 

 

MVVM

  • Model
    • 실제 상태 데이터 모델, 접근 할 데이터
  • View
    • 모양, 레이아웃
    • 추상화
    • 재사용성과 테스트 용이성
  • ViewModel
    • 개체를 쉽게 관리하기 위함
    • 데이터 개체를 변환하는 역활
    • 화면 표현의 대부분을 처리

 

  • Distribution : View가 MVP의 View보다 책임이 많음
  • Testability : 테스트 용이
  • Ease of use : MVP와 코드 양이 비슷하다, Reactive,Rx 개념 필요

 

 

 

 

VIPER

  • View
    • UIViewController에 해당
    • View Life Cycle: ex) viewDidLoad 함수가 호출되었음을 Presenter에 알림
    • View Event: ex) signUpButton이 클릭되었음을 Presenter에 알림
    • View Control: ex) titleLabel의 텍스트를 바꾸는 방법을 Presenter에 제공
  • Interactor
    • Data(Entity)에 대한 비즈니스 로직
  • Presenter
    • View와 Interactor의 중간 다리 역할
    • View에 대한 비즈니스 로직
    • Life Cycle에 대한 처리
    • View Event에 대한 처리
    • View 업데이트
    • UIKit Independent
  • Entity
    • 네트워크, DB 등의 데이터 모델
    • Realm Object, NSUserDefuatls, Json Data 등
    • Interactor에서 사용
  • Router
    • View 간의 전환
    • VIPER 컴포넌트들의 DI(Dependency Injection)를 담당

 

  • Distribution : 4개의 구조중 제일 분배가 잘되어있음
  • Testability : 테스트 용이
  • Ease of use  : 코드양이 제일 많음, 작은 기능에도 많은 클래스를 작성해야함

 

 

 

 

VIP

VIP 패턴은 VIPER패턴과 디렉토리와 생성되는 클래스는 동일하지만 플로우를 다른 관점에서 보는 아키텍처이다.

VIPER패턴은 양방향으로 로직이 순환해서 순환참조에 의한 메모리 누수가 날수있고, 또한 하나의 액션의 기대 결과값을 위해 각 클래스의 프로토콜에 메소드를 만들어야하는 수고수러움이 있다.

이 문제를 덜고자  VIP 패턴은 단방향으로 로직이 순환해서 액션에대한 결과값을 보여주는 형태이다.

 

VIP 플로우

  1. View 이벤트가 시작되고 Interactor 메소드를 실행해서 비지니스로직을 실행  
  2. Interactor에서 비지니스로직을 처리하고 결과를 다시 Presenter로 보냄
  3. Presenter에서 Interactor에서 받은 결과에 대한 UI처리를 View에 보여줌.

VIPER 와는 다르게 액션에 대한 비지니스로직을 Presenter를 통하지 않고 바로  Interactor로 요청해서 변화를 주며 단방향으로 플로우가 진행된다.

 

VIP 패턴 참조 자료

https://iosmentor.io/clean-architecture-for-ios/

VIP 예제 프로젝트

https://github.com/Clean-Swift/CleanStore

 

 

 

 

https://medium.com/@crelies/viper-architecture-evolution-for-ios-8367e498b7b

 

VIPER 🐍 Architecture Evolution for iOS

Improvements over time to an existing Architecture pattern

medium.com

 

https://swifting.io/blog/2016/09/07/architecture-wars-a-new-hope/

 

#24 Architecture Wars – A New Hope – swifting.io

A long time ago in a galaxy far, far away… Or maybe not that far away… Have you ever had a feeling, as I have had many times, that the design of your app seemed so brilliant at first, but suddenly adding more and more features to it made your source code m

swifting.io

 

https://github.com/Clean-Swift/CleanStore

 

Clean-Swift/CleanStore

A sample iOS app built using the Clean Swift architecture. Clean Swift is Uncle Bob's Clean Architecture applied to iOS and Mac projects. CleanStore demonstrates Clean Swift by implementing the...

github.com

https://drive.google.com/file/d/1BIj7j_4UZikdwVtIkoBZEgeijrWTNMP4/view

https://medium.com/swift2go/installing-the-clean-swift-template-in-xcode-6b4367006827

CleanSwift_v3.0.2 (1) (1).zip
0.16MB

 

아이폰 아키텍쳐 비교

ios architecture

swift clean architecture

ios 모델

ios model

'IT > Swift' 카테고리의 다른 글

[swift] Subscript  (0) 2019.09.19
[swift] Map, Filter, Reduce, Monad, FlatMap  (0) 2019.09.16
[swift] swift5  (0) 2019.08.21
[swift] guard  (0) 2019.08.21
[swift] Protocol  (0) 2019.08.21