-
Notifications
You must be signed in to change notification settings - Fork 1
모듈 컨벤션
YoungBin Lee edited this page Jan 23, 2023
·
7 revisions
일반적인 모듈화 패턴 | Android 개발자 | Android Developers
위 구글 도큐먼트의 구분에 따름
ℹ️ 데이터 모듈에는 일반적으로 저장소, 데이터 소스, 모델 클래스가 포함되어 있습니다. 데이터 모듈의 세 가지 주된 역할은 다음과 같습니다.
- 특정 도메인의 모든 데이터 및 비즈니스 로직 캡슐화: 각 데이터 모듈은 특정 도메인을 나타내는 데이터를 처리해야 합니다. 관련이 있는 데이터라면 다양한 유형의 데이터를 처리할 수 있습니다.
- 저장소를 외부 API로 노출: 데이터 모듈의 공개 API는 데이터를 앱의 나머지 부분에 노출하는 일을 담당하기 때문에 저장소여야 합니다.
- 외부로부터 모든 구현 세부정보 및 데이터 소스 숨기기: 데이터 소스는 같은 모듈의 저장소에서만 액세스 가능해야 합니다. 외부에는 공개되지 않습니다. Kotlin의
private
또는internal
공개 상태 키워드를 사용하여 데이터 소스를 숨길 수 있습니다.
MorningBearModel
MorningBearStorage
ℹ️ 일반 모듈(핵심 모듈이라고도 함)에는 다른 모듈에서 자주 사용하는 코드가 포함됩니다. 일반 모듈은 중복성을 줄이는 역할을 하며, 앱 아키텍처의 특정 레이어를 나타내지는 않습니다. 다음은 일반적인 모듈의 예입니다.
- UI 모듈: 앱에서 맞춤 UI 요소를 사용하거나 정교한 브랜딩을 사용하는 경우 모든 기능을 재사용할 수 있도록 위젯 컬렉션을 하나의 모듈로 캡슐화하는 것이 좋습니다. 이렇게 하면 서로 다른 기능에서 UI를 일관되게 만들 수 있습니다. 예를 들어 테마 설정이 일원화되어 있다면 리브랜딩이 발생할 때 골치 아픈 리팩터링 작업을 피할 수 있습니다.
- 애널리틱스 모듈: 일반적으로 추적은 소프트웨어 아키텍처에 대한 고려 없이 비즈니스 요구사항에 따라 정해집니다. 애널리틱스 추적기를 서로 관련 없는 여러 구성요소에 사용하는 경우가 많으며, 이 경우 전용 애널리틱스 모듈을 사용하는 것이 좋습니다.
- 네트워크 모듈: 많은 모듈에 네트워크 연결이 필요한 경우 http 클라이언트 제공 전용 모듈을 사용하는 것이 좋습니다. 이는 클라이언트에 맞춤 구성이 필요할 때 특히 유용합니다.
- 유틸리티 모듈: 도우미라고도 하는 유틸리티는 일반적으로 애플리케이션 전체에서 재사용되는 작은 코드입니다. 유틸리티의 예로는 테스트 도우미, 통화 형식 지정 함수, 이메일 검사기 또는 맞춤 연산자가 있습니다.
MorningBearUI
MorningBearNework
MorningBearKit
MorningBearImage
ℹ️ 기능은 일반적으로 화면 또는 밀접하게 관련된 일련의 화면(예: 가입 또는 결제 흐름)에 해당하는 독립적인 앱 기능을 의미합니다. 앱에 하단 탐색 메뉴가 있는 경우 각 대상이 기능일 가능성이 높습니다.
MorningBearDataProvider
MorningBearDataEditor
ℹ️ 앱 모듈은 애플리케이션의 진입점입니다. 앱 모듈은 기능 모듈에 종속되며 일반적으로 루트 탐색을 제공합니다. [빌드 변형](https://developer.android.com/studio/build/build-variants?hl=ko)을 사용하면 단일 앱 모듈을 다양한 바이너리로 컴파일할 수 있습니다.
MorningBear
graph TD
Data --> General --> Fuction --> App
General --> App
graph LR
StorageService --> StorageManager --> DataEditor --> ViewModel_A
Network --> DataEditor
ViewModel_A --> ViewController_A
DataEditor --> ViewModel_B --> ViewController_B
- ex.
Data
에서Kit
참조하는 동시에Kit
에서Data
참조
- ex.
Data
에서UI
참조
- 즉, Data를 App에서 바로
import
하지 말 것 - ex.
main(MorningBear)
에서Data
orStorage
참조 - 필요한 경우
@_exported
를 이용해 re-export하여 간접적으로 노출시킬 것