Toy Project.
- clean architecture
- multi-module
- coroutine
- kotlin
- mvvm
- material design 3
- androidx
- navigation
- lifecycle
- paging3
- compose
- hilt
- coil
- (WIP) kotlin-serializable
- ci/cd, code quality
- unit test
메인 화면.
@Composable PlayGroundMain()
: 메인 화면의 기본 베이스, 뷰 와 네비게이션 호스트 연결.PlayGroundNavHost
: 앱 네비게이션 Host@Composable MainScreen()
: 메인 화면 뷰
common
: (LIB) 공통- Main, IO 등 주입받아서 사용 할 수 있게 한 코루틴 디스패처.
data
: (LIB) 데이터 레이어- (Repository, DataSource) 네트워크, 로컬 데이터 소스 에 대한 비즈니스 로직 정의.
- 비즈니스 로직이 너무 방대해지면 이를
domain
모듈에 UseCase 로 쪼갠다.
- 비즈니스 로직이 너무 방대해지면 이를
- (Repository, DataSource) 네트워크, 로컬 데이터 소스 에 대한 비즈니스 로직 정의.
domain
: (LIB) 도메인 레이어- 각 피쳐에서 사용 하게 될 UseCase.
design
: (LIB) 머티리얼 디자인 테마, 컬러, 위젯 컴포넌트 등 컴포즈에 사용될 리소스- 커스텀 뷰 는 컴포즈로만 작성 하며 이 서브 모듈 에서만 추가 한다.
- 추가되는 컬러 등은 internal 으로 모듈 내 에서만 사용 가능 하다.
- 참고 Material Theme Builder
network
: (LIB) Retrofit, OkHttp 등 공통 코드.test
: (LIB) 테스트 코드 공통, 러너 등.
2.3 build-logic
- convention : 멀티 모듈 환경에서 각 메인, 서브 모듈들의
build.gradle.kts
에 적용 되는 중복(보일러 플레이트)되는 코드들을 따로 정리 하여 공통 일괄 적용 시켜준다.- 아래에 정의 된 각 플러그인 들은 필요에 따라 추가 하면 된다.
- 모든 모듈에 적용 가능
kr.swkang.playground.android.application
: 안드로이드 기본 구성kr.swkang.playground.android.application.compose
: 컴포즈 관련 구성kr.swkang.playground.android.feature
: 안드로이드 피쳐 들kr.swkang.playground.android.hilt
: DI 도구인 Hilt 사용을 위한 구성kr.swkang.playground.android.test
: 테스트 공통 설정
- 라이브러리 모듈
kr.swkang.playground.android.library
: 라이브러리 모듈에 적용하기 위한 안드로이드 구성kr.swkang.playground.android.library.compose
: 라이브러리 모듈에 적용하기 위한 컴포즈
- 모든 모듈에 적용 가능
- 아래에 정의 된 각 플러그인 들은 필요에 따라 추가 하면 된다.
실제로 구현될 서브 피쳐의 ui 레이어 구현 레이어. (Compose screen, ViewModel, navigation..)
pokemon
: poke api 를 활용한 간단한 포켓몬 목록, 상세 보기.- svg 포켓몬 이미지 리소스 추가.
- 원래 이미지 서버를 두고 불러와야 하지만, 서버가 없어서 로컬에서 불러옴. 용량 이슈로 인하여 최대 300개 까지만 저장.
gallery
: 안드로이드의 Material Design 3 기반의 각 위젯과 컴포넌트들을 만들어서 테스트 해 보는 화면.- MD3 디자인을 적용 하고 여러가지 컴포넌트들을 직접 구현하고 이를 테스트 해 본다.
- 각 컴포넌트들도 여러가지 수정 해보거나 Basic 을 이용 해 커스터마이징 한다.
- GitHub Action
- pre-commit :
.github/pre-commit
스크립트를.git/hooks/pre-commit
으로 복사 하는 스크립트githooks.gradle.kts
를 실행 해야 한다.
- pre-commit :
- ktlint
- 이전의 플러그인 디펜던시 의존이 아닌 ktlint CLI를 이용하여 code style로 적용 되었다.
- 윈도우의 경우 ktlint 릴리즈 jar 파일을 환경 변수에 등록 해야 한다. 이전 인터넷에 있던
--apply-idea-to..
와 같은 명령어는 제거 되어 동작하지 않는다.
- detekt
- (CLI)
> detekt -r html:build/reports/detekt.html ...
:-r
파라미터 추가 한 뒤 필요한 리포트 파일과 경로를 추가 하면 된다
- (CLI)
- turbine
- mockk