iOS 아키텍처 분석 - VIPER

pollajk·2024년 9월 2일

iOS 아키텍처

목록 보기
3/4
post-thumbnail

Viper패턴은 다른 MV(X)패턴들이랑 이름부터가 많이 다르다고 볼 수 있습니다.

Viper패턴은 어떤 점이 MV(X)패턴들이랑 다른지 알아봅시다.

우선 Viper패턴은 핵심은 데이터를 두 곳에서 관리한다.

기존 MV(X) 패턴 같은 경우는 Model에서 데이터를 관리하는게 대부분이었습니다.

하지만 Viper같은 경우에는 Interactor, Entity에서 데이터를 관리합니다.

우선 Viper패턴의 구조를 알아보겠습니다.

이렇게 Viper패턴이 동작하는데 하나씩 뜯어보겠습니다.

View

  • ViewController를 포함하고 있습니다
  • Presenter에 대한 참조를 보유하고 있습니다
  • Presenter에서 호출해 자신을 변경할 수 있는 메서드를 내부에 보유합니다

Interactor

  • 비즈니스 로직을 담고 있습니다 - API같은 데이터 관련 로직을 보유합니다
  • Presnter에 대한 참조를 보유합니다
  • Presenter에서 호출해 비즈니스 로직을 실행할 수 있는 메서드를 내부에 보유합니다
  • 비즈니스 로직이 종료되고 필요할 경우 Presenter에 데이터를 전달합니다

Presenter

  • View, Interactor 기반으로 데이터를 불러오고 화면에 적용하는 역할을 합니다
  • View, Interactor, Router에 대한 참조를 보유하고 있습니다
  • View한테 액션을 받아 Router에 화면 전환을 요청합니다
  • View한테 액션을 받아 Interactor에 데이터를 요청합니다

Entity

  • 단순한 데이터 모델입니다
  • API기반으로 불러오는 데이터를 의미합니다

Router

  • 화면을 언제 띄우는지 Navigation 로직을 가지고 있습니다
  • Start()를 통해 생성, View, Interactor, Presenter를 생성하고 할당합니다
  • 화면 전환을 수행할 수 있는 메서드를 내부에 보유합니다

    Router에 의존성 주입, Application 모듈 간 데이터 전달, 연결을 진행하므로 VIPER패턴에서 굉장히 중요한 역할을 한다고 봐도 무방합니다.


VIPER의 장점

  • 기존의 MVC 패턴의 Massive View Controller 문제를 일부 해결 가능합니다
  • Router 존재로 기존 MVX패턴보다 확실한 책임분리가 가능합니다
  • 단위가 독립적이라 테스트에 용이합니다

VIPER의 단점

  • Presenter <-> View / Presenter <-> Interactor가 서로 보유하므로 양방향 통신을 합니다. 이로 인해 순환참조(데드락)에 걸릴 수 있습니다
  • 기본 파일이 5개라 간단한 프로젝트를 진행해도 시간이 오래걸립니다

VIPER의 동작 방식

  1. Route에 DI를 하기 때문에 첫 View의 시작 페이지를 보여줍니다.
  2. View가 새로운 데이터가 필요하다고 Presenter에게 알립니다.
  3. Presenter가 Interactor에게 데이터를 요청합니다.
  4. Interactor는 Entity에게 데이터를 요청하고 비즈니스 로직을 구성합니다.
  5. Interactor는 Entity에게 받은 데이터를 가공 후 Presenter에게 전달합니다.
  6. Presenter는 Entity 데이터를 View에게 전달합니다
  7. View는 해당 Entity를 화면에 표시합니다.

결론: 세상에 많은 아키텍처들이 존재하지만 상황에 맞게 사용하는 것이 좋아 보인다!

참고자료 출처
이누의 개발성장기
동동이
night-Ohl
Vapor

profile
열심히 공부하는 단계

0개의 댓글