티스토리 뷰

Develop/Android

[Android] Clean Architecture

노이지 2021. 9. 27. 21:17
반응형

1. 클린 아키텍처란?

클린 아키텍처는 의존성 규칙을 따라 관심사를 분리하고, 본질적으로 테스트하기 쉬운 시스템을 만들 수 있는 아키텍처 구조이다. 클린 아키텍처를 적용하면 변화의 위치가 명확하기 때문에 생산성을 증대시킬 수 있고 변화에 더 잘 대응할 수 있다.

 

레이어의 가장 바깥 쪽이 사용자와의 접점에 있는 Presentation이고 가장 안쪽의 Entities가 사용자가 실제로 생각하는 개념 단위이다. 클린 아키텍처에서는 서버 쪽 내용이지만 안드로이드에도 이 원리를 적용시켜 UI를 독립시키고, Database를 분리시키고, 외부적인 설정에 독립적인 구조를 적용하면 프레임워크에 의존적이지 않은 코드를 짤 수 있다.

 

각 레이어의 역할

1) Entities

  • 애플리케이션에서 핵심적인 기능인 Business Rule들을 담고 있다.
  • Entity들은 outer layer들에 속한 다른 class나 component들에 대해 전혀 몰라도 된다.

2) Use cases

  • 특정 애플리케이션에 대한 Business Rules
  • 시스템이 어떻게 자동화될 것인지 정의하고 애플리케이션의 행위를 결정한다.
  • 즉, 프로젝트 레벨의 Business Rules(Entities)를 사용하여 목적을 달성한다.

3) Adapters

  • domain과 infrastructure 사이의 번역기 역할
  • GUI로부터 입력을 받아 Use cases와 Entities에게 편리한 형태로 repackage한다.
  • GUI의 MVC 아키텍처를 완전히 내포하며, Presenter, View, Controller가 모두 여기에 속한다.

4) Infrastructure

  • 모든 I/O components (UI, DB, frameworkds, devices)가 있는 곳
  • 변화될 가능성이 매우 높기 때문에 stable한 domain과는 확실히 분리가 되어있고, 따라서 비교적 쉽게 변하고 component 또한 쉽게 교환된다.

 

2. 안드로이드에 클린 아키텍처 적용하기

안드로이드에 클린 아키텍처를 적용하기 위해서는 레이어를 Presentation, Data, Domain, Entity 네 개로 분리한다.

 

  • Presentation: 사용자에게 보여지는 로직과 관련된 레이어
  • Data: 네트워크를 포함한 데이터를 가져오는 레이어
  • Domain: 사용자의 유즈케이스로 분리되는 레이어
  • Entity: 사용자의 개념을 정의하는 레이어

이 네 레이어 간의 의존성은 안쪽으로만 발생해야 한다. 가장 하단의 레이어일수록 가장 의존성이 낮아야 한다. 예를 들어 Presentation 레이어는 Data 레이어를 알지만 Data 레이어는 Presentation 레이어를 몰라야 한다. 의존성이 낮은 레이어부터 하나씩 자세히 살펴보자.

 

Entity 레이어

  • 순수한 Java나 Kotlin 모듈
  • 안드로이드 모듈이 아니므로 안드로이드와의 의존성이 없다.

 

Domain 레이어

  • 순수한 Java나 Kotlin 모듈
  • 실제로 사용자가 하는 일련의 행동들(유즈 케이스를) 적용하기 때문에 안드로이드에 의존할 필요가 없다.

 

Data 레이어

  • 도메인 레이어를 알고 있으므로 도메인 레이어에 정의된 Repository를 실제로 구현한다.
  • Data Source에 의존성이 생기므로 안드로이드 의존성이 생길 수 있다.

 

Presentation 레이어

  • UI 레벨에서의 처리
  • 안드로이드 의존성이 높다.

 

참고

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함