안드로이드 아키텍처

|

Logical layers

  • GUI를 가진 시스템은 4가지의 추상 레이어로 구분된다

User Interface (UI) Layer

Application Layer

Domain Layer

Infrastructure Layer


UI Layer

  • 렌더링을 담당한다
  • UI 요소로 이벤트를 캡처하여 어플리케이션 레이어에 전달한다 (핸들링 x)


Application Layer

  • UI 레이어의 이벤트를 핸들링한다
  • UI 레이어에서 전달받은 이벤트 처리를 위해 도메인 레이어로 전달한다
  • 도메인 레이어에서 전달 받은 결과를 UI 레이어로 전달한다


Domain Layer

  • 비즈니스 로직을 처리한다


Infrastructure Layer

  • 특정 도메인이 아닌 일반적인 기능을 제공한다 (DB, 네트워크 등등)


Presentation Layer

  • UI Layer + Application Layer



MVx

  • Presentation Layer 아키텍처 패턴의 일종 (MVC, MVP, MVVM, etc)
  • View(UI)를 디커플링하는 것이 목표
    • Activity와 Fragment로부터 UI로직을 분리하여 Controller 역활을 하게한다
  • Model
    • 상태, 비즈니스 로직, 자료구조를 의미한다 (구현체에 따라 의미가 달라진다)
  • View
    • User Interface (모든 MVx 구조에서 동일하다)
  • X
    • 상태, 비즈니스 로직, 자료구조를 의미한다 (구현체에 따라 의미가 달라진다)

MVP

img

  • View는 Presenter에게 이벤트를 전달만 하는 역활(수동적)이므로 쉽게 대체 될 수 있어야만 한다

  • View는 재사용할 수 있어야만 한다


UI 로직 특성

  • 디테일하고 정확한 계산이 필요하다
  • 다른 레이어보다 변화가 자주 일어난다
  • 읽을 수 없다??
  • 수동으로 테스트하기 가장 쉽다
  • 자동으로 테스트하기 가장 어렵다


Activity

  • UI 로직 외에 많은 책임을 가진다
    • 라이프사이클, 화면 이동, 런타임 퍼미션, 로더, 프레그먼트, 다이얼로그, DI …
    • Activity 자체만으로는 UI 로직을 분리하는 것이 불가능하다
    • Activity가 View 인터페이스를 상속받고 구현함으로서 분리한다
    • 추후에 별도로 View 인터페이스를 구현한 클래스로 Activity의 UI 로직을 옮긴다
    • 그리고 Acivity에서 View 인터페이스를 구현한 클래스를 사용한다
    • 그러면 Activity의 역활은 MVx의 x가 된다 -> x와 연관된 모든 로직이 Activity에 구현 되어 있다는 걸 의미하지는 않는다
    • 이것이 상속보단 구성을 사용하는 예제가 된다
    • 다른 MVx 아키텍처에서도 각각의 컴포넌트들이 구성이 될 수 있다

UI 레이어와 Application 레이어 중간에 Decoupling 레이어를 둠으로써 두 레이어 사이에 직접적인 의존관계를 끊는다.

UI 레이어에서 Listener를 통해 Application 레이어(Activity)에게 결과를 알린다.

따라서 View는 Activity와 직접적인 의존관계는 가지지 않으며 Listener를 통해 변화를 알린다.

decouplingLayer