[Android] CleanArchitecture 적용

유재민·2022년 4월 21일
0
post-thumbnail

앱 개발 중 좀 더 체계적인 구조를 만들어보고 싶어서 클린 아키텍처에 대해 공부를 하기 시작했다.

최근에 적용해본 디자인 패턴인 MVVM패턴과 CleanArchitecture 구조를 함께 적용시키는 예제들이 많다보니 나도 한번 도전해보기로 했다.

🤷🏻‍♀️ 클린 아키텍처란?

💡 확장수정에 용이하고, 유지보수에 비용이 적게 들어가며 코드를 잘 분리하여 테스트 코드 작성에 용이하게 하는 등의 목적을 만족하게 하기위한 아키텍처

1. 관심사 분리

: 다른 모듈이나 특정한 책임이 있는 섹션으로 분리된 코드는 유지 및 추가 수정을 더 쉽도록 함

2. 느슨한 결합

: 유연한 코드는 시스템 변경없이 쉽게 바꿀 수 있음

3. 쉬운 테스트


👉🏻 CleanArchiteture in Android

  • 안드로이드에서 클린 아키텍처는 총 3가지 계층(Presentation, Domain, Data) 으로 나누어진다.
  • Presentation -> Domain <- Data 형태로 의존성을 갖게 된다.

1. Presentation

  • 사용자의 입력에 대한 처리를 하는 UI와 상호작용하는 계층
  • Activity, Fragment, ViewModel 등의 Android 항목을 포함
  • Domain 계층을 포함

2. Domain

  • Application의 비즈니스 로직 포함
  • 의존성을 가지지 않고 독립적으로 분리되어 있어 가장 안쪽에 있는 모듈이며,
    다른 Application에서도 사용 가능
  • 완전한 자바 모듈
  • UseCase와 Model을 포함
  • Repository 인터페이스를 포함

3. Data

  • DB, 서버와의 통신이 이루어지는 계층
  • Domain 계층 포함
  • Domain 계층에 의해 노출된 인터페이스 구현
  • presentation에 data 분배
  • mapper을 통해 Data -> Domain 모델 변환 역할을 수행
  • Domain의 Repository 구현체(Impl)를 포함한다.

❓ 어떻게 Android에 적용할 수 있을까?

안드로이드에 적용하기 전 나오는 용어에 대해 살펴보겠다.

UseCase

  • 상호작용자 (interactor)
  • 각 개별 기능이나 비즈니스 로직 단위를 의미
  • 네트워크에서 Data를 가져오거나 Database에서 Data를 읽는 것과 같이 기본 설정 등을 의미
  • remote or local data source로부터 data를 가져와 presentation 계층에 전달해주는 비즈니스 로직 실행
  • presenter 와 repository 인터페이스의 중재자

Repository

  • Domain 모듈에서 생성하는 인터페이스
  • Repository 구현체(Impl)는 Data 모듈에 있음

Mapper

  • 이름부터 한 유형과 다른 유형을 매핑시키는 것을 의미
  • 실제로 앱에서는 서버에서 받은 것과 동일한 개체를 사용해 세부정보를 UI로 설정

♻ Data Flow

  1. UI에 사용자 이벤트가 트리거되면 ViewModel or Presenter에 필요한 action을 요청함
  2. 그러면, ViewModel은 action의 결과를 얻기 위해 UseCase와 연결
  3. UseCase는 Repository와 상호작용해서 Network or Database 등 적절한 Data source에서 원하는 값을 가져옴

Detailed Guide on Android Clean Architecture
Clean Architecture는 모바일 개발을 어떻게 도와주는가? - (1) 경계선: 계층 나누기
[Android] Clean Architecture in Android

profile
유잼코딩

0개의 댓글