본 프로젝트는 배달의 민족을 모티브로 제작된 위치기반 음식 주문 어플리케이션입니다. 제작의도로는 아키텍처와 디자인패턴, Jetpack를 경험하고 학습하기 위해 진행하였습니다. 프로젝트를 들어가기 전 다양한 프로젝트를 해보면서 아키텍처와 디자인 패턴에 대한 부재로 인한 문제점을 이해하게 되었고 아키텍처와 디자인 패턴을 설계 및 학습하기 위해 작은 프로젝트를 진행했습니다. 배달의 민족 어플리케이션의을 참고하여 UI에 신경을 썼으며 이전에 SK-API의 정보를 사용하여 인근 가게의 정보를 받아옵니다. 또한 이전 사용해보았던 Koin대신 Google에서 권장하는 Hilt를 적용하여 개발했습니다
- Firebase를 활용한 소셜 로그인 인증 코튼 관리 및 내 정보 화면 구현
- 커스텀 뷰와 ViewPager2를 사용하여 움직이는 메인 화면 구현
- SK-API를 연동하여 음식점 목록화면, 상세화면 구현
- 찜 가게, 장바구니에 담은 정보를 Firestore에 저장 및 관리
- 찜 한 가게 화면, 주문내역 화면 구현
- 공유하기 기능
- Android Architecture Guide 설계
- Hilt 사용
- Coroutine 사용
- MVVM Patten, State Patten 설계
- Google Android Architecture Guide에 맞춰 개발하면서 아키텍처에 대해 이해하게 되었습니다.
- 커스텀 뷰와 ViewPager2를 사용하여 움직이는 UI를 만들어보면서 이전 사용해봤던 커스텀 뷰에서 보다 자유로운 안드로이드 UI를 학습할 수 있었습니다.
- 디자인 패턴에 대한 이해도가 높아졌습니다.
- 이전 사용하였던 Koin대신 Hilt를 적용하여 개발하여 DI에 대한 이해도가 더욱 높아졌습니다.
저는 아키텍처와 디자인패턴을 위해 많은 검색과 자료를 찾아보았습니다. 그 중에서. '드로이드 나이츠'에서 MVVM 강의를 하였던 "Grap"의 정승욱 개발자님의 강의를 보고 의문점을 자문을 이메일로 보냈고 회신의 내용의 가장 중점적인 내용은 "구글 아키텍처와 MVVM은 다르다"와 "현재로서는 MVVM를 토대로 개발한 프로젝트 공유는 할 수 없다"였습니다. 결국 예시 없이는 확실한 MVVM 체계를 개발할 수 없었고 MVVM을 고집할수록 구글 아키텍처와 멀어진다고 판단하였으므로 확실하게 나와있는 Google Android Architecture Guide기본으로 잡고 MVVM이 추구하는 방향성을 최대한 맞추려고 노력하였습니다. 아래는 제가 설계한 프로젝트 도면입니다.
그 중 UI 레이어에 State Patten을 적용시켜 비즈니스 로직을 용이하게 하려 노력하였습니다.
왼쪽은 Koin을 사용했던 appModule입니다. compile 단계에서 확인해 볼 수 있고 구글에서 추천하는 Hilt로 변경하였습니다. 오른쪽은 Hilt로 변경한 이번 프로젝트입니다.
본 프로젝트에서는 네트워크 작업에 관련된 작업(Firebase 데이터 작업, API 자료 불러오기)등에서 사용되었습니다. 대표적인 Rxjava와 Coroutine중 Coroutine을 결정하게 된 이유는 학습 곡선이 완만하기에 선택하였습니다.
- LiveData -> Livestate 로 변경
- LiveData가 여러개로 나뉘어 있는데 좀더 합치기
- 리뷰 액티비티 만들기
- 디자인 좀더 신경 쓰기