[Android] Clean Architecture

yuuuzzzinzzzang·2022년 6월 19일
3

이 글은 앱 아키텍처 가이드찰스의 안드로이드 블로그를 참고해 공부하고 정리한 글입니다.

클린 아키텍처란?

클린 아키텍처는 로버트 C.마틴이 제시한 소프트웨어 설계 방식입니다.
계층을 나누어 관심사를 분리하는 것이 목표이고, 이런 아키텍처가 동작하기 위해서는 의존성 규칙을 지켜야 한다고 합니다.

관심사 분리 ❓

계층별로 역할을 나누어 분리함으로써 다양한 요구(대규모 업데이트, 새로운 기능, 버그수정, 테스트, 고객의 요청)등에 유연하게 대처가 가능합니다.

의존성 규칙 ❓

모든 소스코드 의존성은 반드시 외부에서 내부로, 고수준 정책을 향해야 한다고 합니다.
즉, 업무의 업무 로직을 담당하는 코드들이 구체적인 세부 사항에 의존하지 않아야 합니다.
이를 통해 업무 로직(고수준 정책)은 세부 사항들(저수준 정책)의 변경에 영향을 받지 않도록 할 수 있습니다.

고수준 ? 저수준 ? 은 대략 아래와 같은 의미라고 합니다..

  • 고수준 : 상위 수준의 개념, 추상화된 개념
  • 저수준 : 추상화된 개념을 실제 어떻게 구현할지에 대한 세부적인 개념

각 모듈의 역할

:domain 모듈

  • Entities, Use cases, Repository(Interface)를 포함합니다.
  • Domain Layer는 가장 안쪽의 레이어입니다. 앞서 언급한 의존성 법칙에 의해, Domain Layer는 다른 레이어를 대상으로 의존성을 가지지 않습니다. 다른 레이어가 Domain Layer를 대상으로 의존성을 가질 뿐입니다. 앱의 중심부로써 이 계층에 포함된 비즈니스 로직은 앱을 구성하고 있는 것 중 가장 중요한 부분입니다. 그래서 비즈니스 로직을 망쳐서는 안되기 때문에 어떠한 계층에도 의존하지 않습니다.

:data 모듈

  • Repository(Implementation), DataSource를 포함합니다.
  • domain과 data간의 분리가 이루어져 있기 때문에, 데이터 소스를 변경해도 domain 모듈에는 영향이 없기 때문에 비즈니스 로직은 피해없이 안전합니다.
  • DataSource는 RemoteDataSource(API)와 LocalDataSource(DB)을 구분합니다.
  • Repository 패턴으로 해당 데이터를 사용하는 Domain Layer가 데이터 출처(data source)를 알 필요 없이 데이터를 가져올 수 있게 해줍니다.

:presentation 모듈

  • Activity & Fragment, ViewModel을 포함합니다.
  • ViewModel에서는 Domain 계층의 유스케이스를 통해 데이터를 가져오게 됩니다.
  • View에서는 ViewModel에서 가져온 데이터를 화면에 업데이트하거나 UI와 관련된 작업을 합니다.

느낀 점

처음에 이해하는 데에는 시간이 많이 걸렸지만, 한번 정확히 공부하고 이해하고 나면 이후 프로젝트를 진행할 때에 테스트하기 쉽고 외부 변경사항에 유연하게 대처할 수 있는 코드를 짤 수 있을 것이라고 생각합니다.

profile
yuuuzzzin의 개발 블로그

0개의 댓글