안드로이드 아키텍처
18 Feb 2020 | AndroidLogical 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
-
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를 통해 변화를 알린다.