대학생을 타겟층으로 지역 환경 보존 및 건강 증진을 위한 플로깅 서비스 AI를 통해 쓰레기를 분류하여 분리수거 방법을 제시해줍니다.
플로깅이란?
조깅을 하면서 길가의 쓰레기를 수거하는, 체육활동과 자연보호활동이 합쳐진 개념으로 스웨덴어에서 '줍다' 를 뜻하는 플로카 우프(Plocka Upp)[1]와 영어단어 조깅(jogging)이 합쳐졌다.
Figma를 통해 UX/UI를 설계했습니다.
- Kotlin Jetpack Compose
- MVVM
- Coroutine + Flow
- Retrofit2
- Hilt
프로젝트가 커져갈 수 록 ViewModel에 모든 기능이 모여있는 점이 복잡해 보였고 가독성이 떨어지는 점을 느꼈습니다.
어떤 기능을 하는지 명확한 이름을 가진 UseCase를 알게되었고 UseCase를 도입하면서 자연스럽게 모듈의 구조 변경의 필요성을 느꼈습니다.
따라서 bob의 Clean Architecture를 적용하여 모듈을 'data', 'domain', 'presentation', 'di'로 구분하여 모듈간의 종속성을 줄이고자 하였습니다.
.
├── data
│ ├── remote
│ │ ├── api
│ │ └── dto
│ └── repository
├── di
├── �domain
│ ├── repository
│ └── usecase
├── presentation
│ ├── ui
│ │ ├── navigation
│ │ ├── screen
│ │ └── component
└── └── viewmodel
-
data : 데이터 소스(DB, 서버 등)와 상호작용을 담당합니다.(domain에 의존합니다.)
- remote: 데이터의 입출력을 정의합니다.(remote 서버와만 상호작용 하기 때문에 datasource 대신 remote로 정의하였습니다.
- repository: usecase가 필요로 하는 데이터의 저장 및 수정 등의 기능을 제공합니다. remote의 api 인터페이스를 참조하여 네트워크 통신이 이루어집니다.
-
di: retrofit, repository, sharedPreference의 의존성을 주입하고 관리합니다.
-
domain: 앱의 핵심적인 비즈니스 로직이 구현되어 있습니다.(어떠한 모듈에도 의존하지 않습니다.)
- repository: repository의 인터페이스를 정의합니다.
- usecase: 비즈니스 로직을 수행하는 객체입니다.
-
presentation: UI, UI와 관련된 컴포넌트를 정의합니다.