Skip to content

모듈 컨벤션

YoungBin Lee edited this page Jan 23, 2023 · 7 revisions

일반적인 모듈화 패턴 | Android 개발자 | Android Developers

구분

위 구글 도큐먼트의 구분에 따름

Data

ℹ️ 데이터 모듈에는 일반적으로 저장소, 데이터 소스, 모델 클래스가 포함되어 있습니다. 데이터 모듈의 세 가지 주된 역할은 다음과 같습니다.

  1. 특정 도메인의 모든 데이터 및 비즈니스 로직 캡슐화: 각 데이터 모듈은 특정 도메인을 나타내는 데이터를 처리해야 합니다. 관련이 있는 데이터라면 다양한 유형의 데이터를 처리할 수 있습니다.
  2. 저장소를 외부 API로 노출: 데이터 모듈의 공개 API는 데이터를 앱의 나머지 부분에 노출하는 일을 담당하기 때문에 저장소여야 합니다.
  3. 외부로부터 모든 구현 세부정보 및 데이터 소스 숨기기: 데이터 소스는 같은 모듈의 저장소에서만 액세스 가능해야 합니다. 외부에는 공개되지 않습니다. Kotlin의 private 또는 internal 공개 상태 키워드를 사용하여 데이터 소스를 숨길 수 있습니다.
  • MorningBearModel
  • MorningBearStorage

General

ℹ️ 일반 모듈(핵심 모듈이라고도 함)에는 다른 모듈에서 자주 사용하는 코드가 포함됩니다. 일반 모듈은 중복성을 줄이는 역할을 하며, 앱 아키텍처의 특정 레이어를 나타내지는 않습니다. 다음은 일반적인 모듈의 예입니다.

  • UI 모듈: 앱에서 맞춤 UI 요소를 사용하거나 정교한 브랜딩을 사용하는 경우 모든 기능을 재사용할 수 있도록 위젯 컬렉션을 하나의 모듈로 캡슐화하는 것이 좋습니다. 이렇게 하면 서로 다른 기능에서 UI를 일관되게 만들 수 있습니다. 예를 들어 테마 설정이 일원화되어 있다면 리브랜딩이 발생할 때 골치 아픈 리팩터링 작업을 피할 수 있습니다.
  • 애널리틱스 모듈: 일반적으로 추적은 소프트웨어 아키텍처에 대한 고려 없이 비즈니스 요구사항에 따라 정해집니다. 애널리틱스 추적기를 서로 관련 없는 여러 구성요소에 사용하는 경우가 많으며, 이 경우 전용 애널리틱스 모듈을 사용하는 것이 좋습니다.
  • 네트워크 모듈: 많은 모듈에 네트워크 연결이 필요한 경우 http 클라이언트 제공 전용 모듈을 사용하는 것이 좋습니다. 이는 클라이언트에 맞춤 구성이 필요할 때 특히 유용합니다.
  • 유틸리티 모듈: 도우미라고도 하는 유틸리티는 일반적으로 애플리케이션 전체에서 재사용되는 작은 코드입니다. 유틸리티의 예로는 테스트 도우미, 통화 형식 지정 함수, 이메일 검사기 또는 맞춤 연산자가 있습니다.
  • MorningBearUI
  • MorningBearNework
  • MorningBearKit
  • MorningBearImage

Funtion

ℹ️ 기능은 일반적으로 화면 또는 밀접하게 관련된 일련의 화면(예: 가입 또는 결제 흐름)에 해당하는 독립적인 앱 기능을 의미합니다. 앱에 하단 탐색 메뉴가 있는 경우 각 대상이 기능일 가능성이 높습니다.

  • MorningBearDataProvider
  • MorningBearDataEditor

App

ℹ️ 앱 모듈은 애플리케이션의 진입점입니다. 앱 모듈은 기능 모듈에 종속되며 일반적으로 루트 탐색을 제공합니다. [빌드 변형](https://developer.android.com/studio/build/build-variants?hl=ko)을 사용하면 단일 앱 모듈을 다양한 바이너리로 컴파일할 수 있습니다.

  • MorningBear

종속 관계

graph TD
	Data --> General --> Fuction --> App
	General --> App

Loading

예시

graph LR
  StorageService --> StorageManager --> DataEditor --> 	ViewModel_A
	Network --> DataEditor
	ViewModel_A --> ViewController_A
	DataEditor --> ViewModel_B  --> ViewController_B
Loading

주의사항

1. 순환 참조(import) 절대 금지

  • ex. Data에서 Kit 참조하는 동시에 Kit에서 Data 참조

2. 하향관계 거스르는 역참조 금지

  • ex. Data에서 UI 참조

3. 하향관계를 뛰어넘어 참조 금지

  • 즉, Data를 App에서 바로 import하지 말 것
  • ex. main(MorningBear)에서 Data or Storage 참조
  • 필요한 경우 @_exported를 이용해 re-export하여 간접적으로 노출시킬 것