오늘은 클린 아키텍처에 대해서 공부해보자.
특정 수준 혹은 복잡도를 가진 애플리케이션을 위한 고품질 코드를 작성하기 위해서는 상당한 노력과 경험이 필요하다. 이에 기존의 계층형 아키텍처가 가지던 의존성에서 벗어나게 하는 설계를 제공하도록 하는 것이 Clean Architecture(클린 아키텍처)이다.
클린 아키텍처는 Robert C. Martin이 작성한 블로그 글에서 정립한 용어로, 클린코드 그리고 클린아키텍처라는 책이 존재한다.
(나중에 읽어보자)
클린아키텍처는 외부 인터페이스에서 독립적으로 구현할 수 있도록 하게 하며, 계층형 아키텍처와는 달리 클린 아키텍처의 의존성은 항상 원 안쪽을 향한다. 즉, 바깥쪽 원에 해당하는 어떠한 것들도 안쪽 원에는 영향을 주지 않는다. (위 그림 참조)
이 아키텍처는 바깥 레이어가 정해지지 않아도 서비스를 구축해나갈 수 있도록 하는 것을 목표로 한다.
클린 아키텍처의 4가지 구조
엔티티(Entities)
- 핵심 업무 규칙을 캡슐화한다.
- 메서드를 가지는 객체, 일련의 데이터 구조와 함수의 집합이다.
- 가장 변하지 않으며 외부로부터 영향을 받지 않는 영역이다.
유즈 케이스(Use Cases)
- 애플리케이션의 특화된 업무 규칙을 포함한다.
- 시스템의 모든 유즈 케이스를 캡슐화하고 구현한다.
- 엔티티로 들어오고 나가는 데이터 흐름을 조정하고 조작한다.
인터페이스 어댑터(Interface Adapter)
- 일련의 어댑터들로 구성한다.
- 외부 인터페이스에서 들어오는 데이터를 유즈 케이스와 엔티티에서 처리하기 편한 방식으로 변환하며, 유즈 케이스와 엔티티에서 나가는 데이터를 외부 인터페이스에서 처리하기 편한 방식으로 변환한다.
- 컨트롤러, 프레젠터, 게이트웨이 등이 여기에 속한다.
프레임워크와 드라이버(Frameworks & Drivers)
- 시스템의 핵심 업무와는 관련 없는 세부 사항이다.
- 프레임워크나, 데이터베이스, 웹 서버 등이 여기에 해당한다.
클린 아키텍처를 왜 사용할까?
클린 아키텍처는 말 그대로 깔끔한 구조이다. 어떠한? 유지보수와 테스트에 깔끔한 구조라고 이해하면 편하다.
클린 아키텍처는 확장 가능하고 테스트가 가능한 프로그램(TDD에 용이한)을 만드는 것에 용이한 구조를 제공한다.
또한 클린 아키텍처로 설계할시 쉽게 패키지 구조 탐색 가능하며, 새 기능을 빠르게 적용가능하고, 명확한 규율이 정해지므로 새로운 인원이 들어와도 안정적으로 구현지속 가능하다.
안드로이드에서 클린 아키텍처는 어떤식으로 사용할까?
1. Presentation : UI(Activity, Fragment), Presenter 및 ViewModel을 포함하고있다. 즉 화면과 입력에 대한 처리 등 UI와 직접적으로 관련된 부분을 담당합니다. 또한 Presentation 레이어는 Domain과 Data 레이어를 포함하고 있다.
2. Domain : 애플리케이션의 비즈니스 로직을 포함하고 비즈니스 로직에서 필요한 Model 과 UseCase를 포함하고 있다. UseCase는 보통 한 개의 행동을 담당하고 UseCase의 이름만 보고 이게 무슨 기능을 가졌을지 짐작하고 구분할 수 있어야하며, 추가로 Domain 레이어는 Presentation, Data 레이어와 어떤 의존성도 맺지 않고 독립적이다는 특징이 있다.
3. Data : Repositoy 구현체, Cache, Room DB, Dao, Model 서버API(Retrofit2) 을 포함하고 있으며 로컬 또는 서버 API와 통신하여 데이터를 CRUD 하는 역할을 한다. 또한 Mapper 클래스도 포함하고 있는데 DB로 부터 받아온 데이터모델과 UI에 맞는 데이터모델간의 변환을 해주는 역할을 한다. 추가로 Domain 레이어를 포함하고있다는 특징이 있다.
'Android > Study' 카테고리의 다른 글
[Android] Context 란? (0) | 2023.02.03 |
---|---|
[Android] Fragment 생명주기(Life Cycle) (0) | 2023.01.14 |
[Android] Android 란? (0) | 2023.01.04 |
[Android] MVVM 패턴 이란? (2) | 2023.01.01 |
[Android] MVP 패턴이란? (0) | 2023.01.01 |