☆-とБ신ㅇl,행복ぁŀ기를,ばł라l요-☆

Clean Swift

2021年03月07日

Clean Swift

Clean%20Swift%202f3b91a6e2924184823295c0a2a24a8b/Untitled.png

Clean Architecture 에서 나온 Architecture인 Clean Swift는 위와 같은 view - interactor - presenter 즉 VIP cycle 을 가진 architecture이다.

Clean swift 의 제어흐름

위의 그림에서 나타낸 제어 흐름을 글로 설명하면

  1. view에서 interactor 에게 business logic 을 요청
  2. interactor는 business logic 또는 business logic 을 수행하는 worker 에게 도움을 요청
  3. worker 에서 networking, database 등 business를 다루고 작업이 완료
  4. 완료된 작업을 interactor는 presenter를 호출하여 view에 표시

와 같이 동작한다.

이러한 모든 작업은 interactor가 presenter 에게 종속되지 않도록 의존성을 되돌리기 위해 swift protocol 을 사용한다.

즉 interactor가 presenter 에 의존하는 것이 아닌 protocol에 선언된 메서드를 호출한다.

Clean Swift Component

View

  • 뷰에 관련된 로직만 처리
  • 비지니스 로직 관련은 interactor에게 요청

Interactor

  • business logic 수행
  • 요청된 것이 완료되면 Presenter에게 데이터를 전송

Presenter

  • interactor로부터 데이터를 받아서 UI를 위한 모델로 가공
  • 가공된 모델을 View에게 전달
    • presenter 에서 간단한 포맷팅을 하거나 worker 에게 포맷팅 작업을 인계할 수 있다.

Worker

  • interactor에서 수행해야하는 business logic 들이 실제 수행되는 곳이다.

Model

Clean%20Swift%202f3b91a6e2924184823295c0a2a24a8b/Untitled%201.png

  • request, response, viewmodel 를 struct 로 표현한다.

    1. Request

      view controller 와 request model을 구성하고 interator에게 전달request model은 text field의 텍스트 입력, picker 에서 선택된 값과 같은 user input들이 대부분 포함된다

    2. Response

      interactor 가 request에 대한 작업을 마친 후, response model에서 result를 캡슐화하고 presenter 로 전달한다.

    3. View Model

      Presenter 가 Interactor로부터 response를 받은 후 string, int 와 같은 raw data 유형으로 결과를 포맷하여 view model로 넣는다. 그런 다음 view model을 다시 view controller 로 전달하여 디스플레이 한다.

  • raw data model을 사용하는 것이 아닌 이러한 struct 구조의 data model을 사용하여 얻는 이점

    • business logic 이 변경되여 기본 데이터 모델이 변경될 때, 코드 베이스 전체를 업데이트할 필요가 없다.

결론

  • VIP Cycle 을 도입하여 단방향의 제어흐름을 갖게해준다.
  • protocol 을 이용해 구현되어 있기 때문에 모의 데이터를 이용한 unit test가 쉽다.

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