Android/Android

[Android] 클린 아키텍처(Clean Architecture)

__JeongYeon 2022. 7. 21. 14:16
반응형

[모든 포스팅은 개인적 공부를 위해 작성된 글입니다]

<클린 아키텍처란?>

- 계층을 나눠서 관심사를 분리하고 분리된 클래스들이 각자 한 가지 역할만 할 수 있도록 구현하는 방식

 

<클린 아키텍처의 목적>

- 높은 가독성

- 협업 유리(이해하기 쉽게 코드 작성)

 - 변수, 함수, 클래스의 이름을 지을 때 의도가 분명하고 검색하기 쉽게 지어야 함

- 변경의 최소화

 

<클린 아키텍처의 장점>

- 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

 

*참고*

https://heegs.tistory.com/57

 

[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

 

반응형