클린 아키텍처
아키텍처를 정의함으로써 기능 간의 경계를 정의해 앱의 확장성과 견고성, 테스트성을 높일 수 있다!
구글 권장 아키텍처
- UI 레이어 : 화면에 애플리케이션 데이터를 표시
- UI 요소 : 화면에 데이터를 렌더링(ex. 뷰 또는 Jecpack Compose 함수)
- 상태 홀더 : 데이터를 보유, UI에 노출, 로직 처리(ex. ViewModel 클래스)
- Domain 레이어 : UI와 Data 레이어 간의 상호작용을 최소화하고 재사용하기 위해 추가(Use cases)
- 복잡한 비즈니스 로직이나 여러 ViewModel에서 재사용되는 간단한 비즈니스 로직 캡슐화
- Data 레이어 : 비즈니스 로직을 포함, 애플리케이션 데이터를 노출
- Repositories : 각 데이터별로 저장소 클래스
- Data Sources : 여러 개의 데이터 소스
클린 아키텍처
Robert C.Martin이 제안한 시스템 아키텍처
최종 목적은 계층을 분리하여 “관심사를 완전히 분리”하는 것! = 의존성을 최소화하는 것
클린 아키텍처에서 의존성은 밖에서 안으로 향한다(—>)
바깥 원은 안쪽 원에 영향을 미치지 않는다!
- 바깥 원 : 메커니즘 / 어떤 일을 어떻게 할 것인가 결정(How) / 저수준(ex. 집에서 팔벌려 뛰기 운동을 한다)
- 안쪽 원 : 정책 / 무엇을 할 것인가(What) / 고수준(추상화된, ex. 운동을 한다)
- Entity
- 비즈니스 규칙을 캡슐화
- 메소드를 갖는 객체, 데이터 구조, 함수의 집합
- 바깥쪽에서 어떤 것이 변경되어도 절대 바뀌지 x(영향받지 x)
- UseCase
- 앱의 고유 비즈니스 규칙 포함, 시스템의 모든 UseCase를 캡슐화 및 구현
- Entity의 데이터 흐름을 제어(영향주지 x)
- UI에서 변경이 일어나도 영향받지 x
- Interface Adapter
- 뷰나 외부의 기능, 사용 중인 프레임워크에 용이한 형식으로 데이터를 변환
- MVVM 패턴에서는 ViewModel, MVP 패턴에서는 Presenter 영역
- Frameworks & Drivers(Web, DB)
- 데이터베이스, 웹 프레임워크 등
- 안쪽 원과 통신할 연결 코드 작성