안전하고 간편한 여행 동행 플랫폼 'W!TH'
패키지별 설명
- manage : TOKEN 및 서버 통신 모듈 등을 관리하는 코드
- data : UI에서 화면을 그리는데 사용하는 데이터를 모아놓은 코드
- local : 로컬에서 저장하는 데이터 클래스를 모아놓은 코드
- remote : Retrofit을 이용해서 response 클래스와 request 클래스를 관리하는 코드
- repository : Retrofit 통신을 위한 interface가 구현된 코드
- extension : 재사용성이 강한 반복되는 코드를 간결하게 만들어주는 kotlin extension 함수들을 모아놓은 코드
- ui : Activity, Fragment, Adapter, ViewHolder 등 화면을 그려주는 코드
- 화면별로 패키지를 분류
- 화면별로 패키지를 분류
라이브러리
- glide : 이미지 로딩을 위해 사용 (url 로드, uri 로드, placeholder 사용해 일관적인 image 처리)
- koin : 생성을 추상화 하기 위해서 사용 (repository, auth, logger 등을 singleton 객체로 쉽게 전체 프로젝트에서 접근)
- retrofit + gson : Json 데이터를 이용한 rest 서버 통신을 위해 사용 (Callback를 람다를 이용해 만드는 함수 설계로 일관적인 code 개발 구현)
- google material : google material design 적용을 위해 사용
- circle imageView : 원형 이미지를 구현하기 위해 사용
- firebase-database : Firebase realtime db를 이용하여 채팅 구현하기 위해 사용
- lottie : 애프터이펙트로 만든 애니메이션을 적용하기 위해 사용
핵심기능 구현 방법
-
채팅
-
FireBase-Realtime DB를 이용하여 채팅 목록과 채팅 기능을 구현
-
채팅 화면 구성을 7개의 ViewHolder를 이용
-
RecyclerView.Adapter에서 채팅 데이터를 각 item viewtype으로 반환하는 로직 구현 => kotlin extension을 최대한 활용하여 보일러 코드를 줄임)
-
WITH DB와 파이어베이스를 연동하여 채팅 목록을 구성함.
-
-
DI 라이브러리(koin)와 kotlin extension을 이용한 손쉬운 비동기 통신 처리
-
반복되는 retrofit 구현체와 enqueue 처리 코드를 koin과 extension으로 종속 코드를 최대한 줄임
-
재사용성을 매우 높게 만들어주고, 결합도를 낮춰 유연성과 확장성을 향상시킴
-
코드를 매우 단순화시켜 기존 enqueue 코드를 단 두 줄로 가능하게함
- 모듈을 생성(koin DSL - manage 패키지)
- Android Application Class를 생성 후 그곳에서 startKoin()으로 실행
- 사용하고자 하는 클래스에서 의존성 주입
-
-
DatePicker
-
날짜 선택 컨트롤을 커스텀하여 다이얼로그 창에 구현
-
다이얼로그에 구현되어 있는 datePicker에서 선택한 값을 koin을 이용하여 로드한 후 부모 화면에서 그 값을 받아 보여줌
-
다이얼로그 창을 띄우기 전, 저장된 날짜 정보를 파싱하여 datePicker에서 띄우는 로직 구현
-
-
Device 갤러리 접근
-
안드로이드 Intent 중 ACTION_PICK을 사용하여 갤러리에 접근하여 이미지를 가져옴
-
onActivityResult()를 오버라이드하여 이미지를 표시하는 작업 수행
- Glide 라이브러리를 사용하여 간편하게 배치
-
getRealPathFromURI() 함수에서 이미지의 절대 파일 경로를 가져옴
-
Multipart로 서버에 해당 이미지 전송
-
lambda 사용
- 주요 사용처
- extension/CallExt : Retrofit Enqueue 코드
- extension/FireBaseListenerExt : FireBase Single Listener와 Value Event Listener 코드
- 람다 사용가능한 코드에는 대부분 적용.
extension function의 사용
********** 모든 뷰를 ConstraintLayout을 이용하여 XML 레이아웃 작성. - 채팅과 Custom Dialog은 ConstraintLayout의 match_parent 버그로 사용할 수 없는 이유로 다른 레이아웃으로 작성
개발자
최승준(CHOI-SEUNGJUN)
조현아(whgusdk98)
석영현(yeonghyeonSeok)