[Android] 클린 아키텍처(Clean Architecture)
[모든 포스팅은 개인적 공부를 위해 작성된 글입니다]
<클린 아키텍처란?>
- 계층을 나눠서 관심사를 분리하고 분리된 클래스들이 각자 한 가지 역할만 할 수 있도록 구현하는 방식
<클린 아키텍처의 목적>
- 높은 가독성
- 협업 유리(이해하기 쉽게 코드 작성)
- 변수, 함수, 클래스의 이름을 지을 때 의도가 분명하고 검색하기 쉽게 지어야 함
- 변경의 최소화
<클린 아키텍처의 장점>
- UI와 DB 분리 : 외부 설정에 독립적이고 프레이워크에 의존적이지 않음
- 쉽게 패키지 구조 탐색 가능
- 유지보수 편리
- 새로운 기능 추가 시 안정적으로 빠르게 적용 가능팅은 개인적 공부를 위해 작성된 글입니다]
<안드로이드에서의 클린 아키텍처 구조>
- Presentation, Domain, Data 계층으로 나눔
- 의존성 방향 : Presentation -> Data -> Domain
- 외부에서 내부로 의존성 가지고 있기 때문에 내부로 갈수록 의존성 낮아짐
(즉, 자신이 하는 행동에 의해 외부의 계층이 영향을 받을 수 있어도 외부의 계층의 행동으로 인해 자신(내부 계층)이 영향을 받으면 안 됨)
<Presentation 계층>
- UI 관련 로직 포함(화면 조작, 사용자 입력 처리)
- View, Presenter, ViewModel 포함
- Data, Domain 계층 포함
- gradle Presentation 모듈 수준
implementation project(':data')
implementation project(':domain')
<Data 계층>
- Domain에서 요청하는 데이터를 서버, DB(Local DB)와 통신하여 처리해주고 알맞게 변환해주는 역할
- Repository 구현체, Room, Retrofit2, Mapper 클래스 등을 포함
- *Mapper 클래스* -> DB로부터 받아온 데이터모델과 UI에 맞는 데이터모델 간의 변환 해주는 역할
- 역할 : 서버와 통신하여 데이터 CRUD
- Domain 계층 포함
- gradle Data 모듈 수준
implementation project(':domain')
<Domain 계층>
- 누구와도 의존성 이루지 않는 독립적 역할
- 비즈니스 로직 포함
- Model, UseCase(비즈니스 로직 단위), Repository Interface(UseCase의 실질적인 구현 담당) 포함
<UseCase>
- 사용자가 하고자 하는 것
- 목적
- 1. ViewModel이 하고자 하는 것 직관적으로 파악 가능
- ViewModel은 UseCase를 파라미터로 받음 : 파라미터만 봐도 ViewModel이 어떤 일 하는지 바로 알 수 있게 됨
- 2. 의존성 줄임
- 사용 방법
- 1. Presentation 계층 : ViewModel이 UseCase 사용
- 2. Data 계층 : Repository의 구현부(실제 데이터 가져옴)
- 3. Domain 계층 : Repository Interface, UseCase
- ViewModel에서 UseCase 호출 -> UseCase에서 RepositoryImp(Repository 구현부) 호출 (Imp는 Data 계층에서 구현) -> RepositoryImp에서 데이터 return -> UseCase에서 return 받은 데이터를 ViewModel로 던짐 -> ViewModel에서 Return 받은 데이터 사용
- *UseCase 관련 내용은 아래의 블로그를 참고하였습니다*
https://heegs.tistory.com/58?category=915533
[Android] Clean Architecture - UseCase 란 ?
처음 학습하면서 작성한 글입니다. 필요시 추후 내용을 수정할 예정입니다. 틀린 부분이 있으면 언제든 지적해주면 감사하겠습니다 :) Clean Architecture 를 공부하는 도중에, UseCase 라는 것을 domain l
heegs.tistory.com
*참고*
[Android] Clean Architecture 실전 압축 정리 - 개념
처음 학습하면서 작성한 글입니다. 필요시 추후 내용을 수정할 예정입니다. 틀린 부분이 있으면 언제든 지적해주면 감사하겠습니다 :) 클린 아키텍처를 공부하다 보면 모든 블로그에서 다음과
heegs.tistory.com
https://youngest-programming.tistory.com/484
[안드로이드] 클린 아키텍처(Clean Architecture) 정리 및 구현
[2021-04-28 업데이트] [2022-02-01 업데이트] Hilt 사용한 프로젝트 링크 하단에 추가 [프로젝트] github.com/mtjin/mtjin-android-clean-architecture-movieapp mtjin/mtjin-android-clean-architecture-movieapp Clean Architecture 학습 및
youngest-programming.tistory.com