Android 프로젝트에서 클린 아키텍처를 적용할 때 일반적으로 다음과 같은 모듈 구성을 채택합니다.
- 도메인 모듈: 앱의 핵심 비즈니스 로직과 코드를 가장 순수한 형태로 포함하는 모듈입니다. 도메인 모듈은 Android 프레임워크나 라이브러리에 의존하지 않으며 앱의 비즈니스 규칙과 도메인 개체만 포함합니다.
- 데이터 모듈: 앱의 데이터 소스를 추상화하는 모듈입니다. 이 모듈은 데이터 처리 방식에 따라 로컬 데이터 소스(예: SQLite), 원격 데이터 소스(예: REST API) 등 여러 하위 모듈로 구성될 수 있습니다. 데이터 모듈은 도메인 모듈과 안드로이드 프레임워크 사이에서 중개자 역할을 하며, 데이터 소스로부터 받은 데이터를 도메인 객체로 변환하여 반환합니다.
- 프레젠테이션 모듈: 앱의 사용자 인터페이스를 구성하는 모듈입니다. 이 모듈에는 활동, 프래그먼트, 보기 및 어댑터와 같은 UI 구성 요소가 포함되어 있습니다. 프레젠테이션 엔진은 UI 관련 작업을 처리합니다. B. UI 이벤트를 처리하고 도메인 모듈에서 받은 데이터를 UI에 표시합니다. 프리젠테이션 모듈은 도메인 모듈과 완전히 분리되어야 하며 도메인 모듈 및 데이터 모듈에 종속됩니다.
- 종속성 주입(DI) 모듈: 클린 아키텍쳐를 구현하기 위해서는 DI 모듈이 필요합니다. DI 모듈은 모든 모듈이 사용하는 종속성을 관리하고 모듈 간의 종속성을 제어합니다. DI 모듈은 일반적으로 Dagger, Koin 및 Hilt와 같은 DI 프레임워크를 사용하여 구현됩니다.
이러한 모듈을 구성하는 것은 Android 앱에서 깔끔한 아키텍처를 적용하는 일반적인 방법입니다. 모듈 구성은 프로젝트의 규모와 구성에 따라 달라질 수 있습니다.
+) 그렇다면 OffsetDateTime을 String 타입으로 변환하는 util 함수의 확장 함수는 어떤 모듈에 있어야 할까요?
OffsetDateTime을 String으로 변환하기 위한 util 함수의 확장 함수는 도메인 또는 util 모듈에 존재할 수 있습니다. 이것은 OffsetDateTime이 도메인 개체의 일부이기 때문에 도메인 모듈에 있을 수 있거나 다른 개체가 이 함수를 사용할 수 있기 때문에 util 모듈에 있을 수 있습니다. 그러나 이 함수는 특정 Android API에 의존하지 않으므로 Android 프레임워크에 의존하는 모듈에 배치하면 안 됩니다.



