EEYatHo 앱 깎는 이야기

Swift ) VIPER - EEYatHo iOS 본문

iOS, Swift/ArchitecturePattern

Swift ) VIPER - EEYatHo iOS

EEYatHo 2021. 7. 5. 17:25
반응형

VIPER

View, Interactor, Presenter, Entity, Router 로 이루어져있다.

 

Router를 통해, 화면전환을 처음으로 고려한 디자인 패턴이며,

 

각 요소가 하는 일, 특징은 다음과 같다.


View

 

UI요소들.
VIewController 포함.

유저입력 수신.

Presenter에 전달.

Presenter에게 ViewModel 수신하며 update.

Presenter을 소유함.

 


Presenter

 

View에게 유저 입력을 전달받음.

Interactor에게 데이터 관련 요청 ( 데이터 만들어, 변경해, 나한테 줘. 등 ).

Interactor에게 전달받은 데이터를 ViewModel로 가공하여 View에게 넘겨줌.

Router에게 네비게이션 요청.

Interactor을 소유함.

Router에게 ViewController에 종속적인 명령을 내리기 위해, View를 weak로 소유함.

 


Interactor

 

Presenter의 요청대로 생성, 변경. 

Presenter에게 데이터를 넘겨줌.

네트워크 통신.

데이터를 소유 ( 일반적인 변수 + Entity 객체들을 말함 )

비지니스 로직. ( "주문서에 담긴 n개의 상품 중 가장 싼 배송비를 최종 배송비로 책정한다." 같은 로직들을 말함. )

 


Entity

 

Interactor에게 소유됨.

네트워크 통신을 위해 만들어지는 Codable struct들.

 


Router

 

Presenter에게 요청받음.

다른 VIPER 모듈간의 전환을 담당. ( 네비게이션 로직 )

새로 만들어지는 VIPER의 모든 구성요소를 생성 및 DI 작업.

Push/Pop, Present/Dismiss

 

 


 

이상이며, VIPER은 명확한 가이드라인이 없는 SW아키텍처일뿐이라,

 

1. Alert, ActionSheet를 띄우는게 Router에서 해야하냐, View에서 해야하냐.

 

2. Router는 NavigationController 마다 1개로 하느냐, VIPER 모듈마다 1개로 하느냐

 

3. 각 요소들을 프로토콜로 연결하느냐, Rx로 연결하느냐..

 

4. Presenter가 View를 소유하느냐, Router에게 View를 알려주는 방식은 어떻게 하느냐.

 

등.

 

사람, 집단마다 세부 구현이 다를 수 있다.

Comments