단방향 아키텍처 (Uni-Directional Architecture) UDA

앱의 데이터 흐름이 한 방향으로 진행되고, 상태는 모델에서만 관리되는 형태 ex) FLUX - MVC의 단점(View와 Model이 서로 의존적)을 보완하기 위해 페이스북에서 고안

MVC

  • 컨트롤러는 입력에 해당하는 모델을 업데이트
  • View를 업데이트 하기위해서 모델가 뷰사이에 의존성이 존재
  • Activity나 프래그먼트가 컨트롤러와 뷰 모두 처리하기때문에 한 클래스에서 MVC 모두 처리하게 됨
  • 앱이 커지고 복잡해질수록 유지보수가 어려움

MVP 문제점 ( Presenter : View에서 요청한 정보를 Model로 부터 가공해서 View로 전달하는 부분 )

  • 상태정보가 뷰와 모델 두 곳에 존재
  • 백그라운드에서 모델이 업데이트 될때 상태 정보 관리가 힘들다.
  • View와 Model은 의존성이 없는 대신 View와 Presenter가 1:1로 강한 의존성을 가지게 됩니다.
  • 뷰와 프리젠터와의 의존성 1대1관계

MVVM

  • Command패턴이나 데이터 바인딩을 이용해서 뷰와 뷰모델간의 의존성을 없앨 수 있다.

단방향 아키텍쳐

  • 데이터와 액션은 한방향으로만
  • View에 영향을 주는 State는 한 방향으로만 수정할 수 있다 — 단방향
  • Model은 State를 변화시키고 View는 State를 참조만 한다 — View와 State 분리

View — Action(Intent) — Store(Model) — View 이렇게 단방향으로 이루어지는 아키텍처 앞 액션이 끝난 후 뒤 액션을 실행한다 — 동기적 실행

단방향 아키텍처를 구성학기 위해 RxJava를 사용

MVI패턴 (Model - View - Intent)

인텐트가 유저를 관찰하고 모델이 인텐트를 관찰하고 뷰가 모델을 관찰하고 유저가 뷰를 관찰 인텐트는 안드로이드에서 쓰는 인텐트가 아니라 Action이라고 생각하면 될거 같다.

Comments