-
[Android] Clean Architecture 학습기Android 2021. 6. 7. 11:10반응형
[프로젝트]
https://github.com/Minoyam/Clean_Coroutines_Hilt_Sample
Minoyam/Clean_Coroutines_Hilt_Sample
Contribute to Minoyam/Clean_Coroutines_Hilt_Sample development by creating an account on GitHub.
github.com
Clean Architecture를 배워보기 위해 간단한 Sample 하나를 만들어 봤습니다.
동작 방식은 Github에 들어가면 확인하실 수 있습니다.
p.s : Coroutine flow까지 학습하여 적용을 해보는 것이 목표입니다.
Clean Architecture 구조
Clean Architecture를 검색을 하시면 이러한 모양의 구조를 많이 확인하실 수 있습니다.
하지만 위의 이미지들은 오리지널 Clean Architecture 구조로써 안드로이드의 Clean Architecture 구조라고 이해를 하기에는 다소 어려운 부분들이 많습니다.
그래서 저는 안드로이드에서는 위에 이미지와 같이 App, Domain, Data 3가지로 나누면 된다고 생각합니다.
- App : UI(Activity, Fragment), ViewModel등 View와 관련된 부분들이 속합니다.
화면과 입력에 대한 처리 등 UI와 직접적으로 관련된 부분을 담당합니다.
App은 Domain과 Data 레이어를 포함하고 있다는 특징이 있습니다. - Domain : 비즈니스 로직을 담당하는 부분입니다.
보통 Dto 와 UseCase, Repository를 포함합니다.
UseCase는 개별 기능 또는 비즈니스 논리 단위를 뜻합니다.
UseCase는 한 개의 행동을 담당하고 이름만 보고 어떤 기능을 하는지 구분할 수 있어야 합니다.
Domain 레이어는 App, Data 레이어와 어떤 의존성도 맺지 않고 독립적이다는 특징이 있습니다. - Data : Repositoy 구현체, DB, Response, Source, API를 포함합니다.
로컬 또는 서버 API와 통신하여 데이터 처리 역할을 합니다.
Domain 레이어를 포함하고있다는 특징이 있습니다.
계층을 분리하여 의존성을 분리할 수 있고, Clean Architecture를 적용하여 이와 같은 장점을 얻을 수 있습니다.
- 코드 테스트 용이
- 유지 보수 용이
- UI의 독립
- DB의 독립
- 외부와의 독립
프로젝트 구조를 짜본다면 위와 같은 형식으로 짤 수 있습니다.
Response는 각 레이어에서 필요한 Data만 Mapping 하여 Dto - Vo로 변환하여 사용하게 됩니다.
코드 구현
app, data, domain을 Multi Module 형태로 나눴습니다.
App
View와 관련된 부분들은 App에서 처리를 하였습니다.
필요한 data는 Mapper를 통해 Vo 형식으로 받아옵니다.
UseCase 구현체를 통해 Domain과 연결됩니다.
(requset 부분도 data class를 만들어서 사용하면 좋습니다.)
Domain
Domain은 Dto와 Interface로 구성되어 있습니다.
Interface 구현체를 App과 Data 레이어에서 구현함으로서 Domain 레이어는 어떤 레이어와 의존관계를 형성하지 않습니다. 이러한 형태를 의존성 역전원칙(DIP)라고 합니다.
의존성 역전 원칙이란 고수준 정책을 구현하는 코드는 저수준 세부사항을 구현하는 코드에 절대로 의존해서는 안되는 걸 뜻하고 대신 세부사항이 정책에 의존해야 합니다.
Data
Data는 DB / Api와 관련된 부분들로 구성되어 있습니다.
Repository 구현체를 통해 Domain과 연결됩니다.
마찬가지로 Response는 Mapper를 통해 Dto로 변환되어 전달됩니다.
이렇게 간단한 Sample로 Clean Architecture를 공부 해 봤습니다.
이것저것 찾으면서 독학으로 공부한거라 다소 틀린 점이 있거나 보완할 부분이 있다면 댓글로 알려주시면
감사하겠습니다!!전체적인 코드 부분은 Github을 통해 참고해주세요.
[참고]
https://youngest-programming.tistory.com/484
[안드로이드] 클린 아키텍처(Clean Architecture) 정리 및 구현
[2021-04-28 업데이트] [프로젝트] github.com/mtjin/mtjin-android-clean-architecture-movieapp mtjin/mtjin-android-clean-architecture-movieapp Clean Architecture 학습 및 구현. Contribute to mtjin/mtjin..
youngest-programming.tistory.com
https://www.slideshare.net/RyanHKang/clean-architecture-on-android-243156618
Clean Architecture on Android
무의식적으로 개발하다보면 높은 결합도와 낮은 응집도를 가진 코드를 작성하게 되고, 결국 유지보수성이 떨어지고 큰 개발 공수로 이어집니다. 이러한 문제점을 보완하기 위해 클린 아키텍처
www.slideshare.net
반응형'Android' 카테고리의 다른 글
[Android] Kotlin Coroutines Flow 2주차 (1/2) (0) 2021.08.11 [Android] Kotlin Coroutines 1주차 (0) 2021.07.28 설계 원칙 - SOLID (0) 2021.03.30 Android App Bundle이 서명되지 않았습니다 (0) 2021.01.14 [Android] 카카오 로그인 v2 API with kotlin - 2 (0) 2020.12.24 - App : UI(Activity, Fragment), ViewModel등 View와 관련된 부분들이 속합니다.