티스토리 뷰
같이 일하시는 분께서 지금 작업하고 있는 프로젝트에 클린 아키텍처 개념을 적용해보면 좋을 것 같다고 말씀해주셔서 과감하게 도전해보기로 하였다.
우선 개발에 공통적으로 적용할 수 있는 클린 아키텍처 개념은 다른 페이지에 따로 정리를 해놨다.
공통적으로 적용되는 클린 아키텍처에 대한 개념은 Entities, Use cases, Interface Adapters, Frameworks & Drivers로 4가지 계층으로 나타나는데 안드로이드에 맞춘 클린 아키텍처는 이를 응용하여 3가지 계층으로 나타낸다. 그림은 다음과 같다.
일반적으로 Presentation, Domain, Data의 총 3개의 계층으로 나눠지게 됩니다.
- Presentation
UI(Activity, Fragment), Presenter 및 ViewModel을 포함한다. 즉, 화면과 입력에 대한 처리 등 UI와 직접적으로 관련된 부분을 담당한다. 또한 Presentation 레이어는 Domain과 Data 계층에 대한 의존성을 가지고 있다.
- Domain
애플리케이션의 비즈니스 로직에 필요한 UseCase와 Model을 포함하고 있다.
UseCase는 각 개별 기능 또는 비즈니스 논리 단위라고 생각하면된다.
UseCase는 보통 한 개의 행동을 담당하고 UseCase의 이름만 보고 이게 무슨 기능을 가졌을지 짐작하고 구분할 수 있어야한다.
Presentation, Data 계층에 대한 의존성을 가지지 않고 독립적으로 분리되어 있다. 안드로이드의 의존성을 갖지 않고 java 및 kotlin 코드로만 구성하며 다른 애플리케이션에서도 사용할 수 있다. Repository 인터페이스도 포함되어 있다.
- Data
Repository 구현체, Cache, Room DB, Dao, Model 서버 API(Retrofit2) 을 포함하고 있으며 로컬 또는 서버 API와 통신하여 데이터를 CRUD하는 역할을 한다. 또한 Mapper 클래스도 포함하고 있는데 DB로 부터 받아온 데이터 모델과 UI에 맞는 데이터 모델간의 변환을 해주는 역할을 한다. 추가로 Domain 계층에 대한 의존성을 가지고 있다.
참조 문헌
[안드로이드] 클린 아키텍처(Clean Architecture) 정리 및 구현
클린 아키텍처와 함께하는 배민앱 (Android) | 우아한형제들 기술블로그
'Programming > 안드로이드(Android)' 카테고리의 다른 글
RecyclerView의 item에 Custom View를 넣고 싶을 때 (0) | 2021.09.01 |
---|---|
[안드로이드] Data binding 사용 시 Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0 Error (0) | 2021.06.03 |
[안드로이드] ProgressBar에 애니메이션 적용 (0) | 2021.05.13 |
[안드로이드] 구글 플레이 콘솔 기기 0대에서 사용 가능 (uses-feature) (0) | 2021.05.11 |
[안드로이드] 스레드와 핸들러 (feat. 깡샘) (0) | 2021.05.11 |