안녕하세요. 10기 박서희입니다. 세 번째 주제는 제가 지금 현재 학습하고 있는 MVVM과 Hilt를 가지고 왔습니다. 저는 아직 Kotlin, Rxjava 등 새로 배우는 것도 많고 경험해보지 못한 것이 많아서 제가 새로 배우는 내용을 같이 다루는 프로젝트를 해커톤 전까지 실습해보고 익숙해지자는 작은 목표를 설정했어요. 그래서 이번 블로그 글로는 상황 공유와 함께 해당 내용을 학습하며 알게 된 내용을 기록하고 실습할 수 있는 프로젝트들을 리스트업 해보았습니다. 아래 내용들은 #ref 에 기재한 링크에서 clone하거나 해석해 본 것들입니다. 해당 링크에서 학습하는 내용을 더 자세히 확인할 수 있습니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다 ღ’ᴗ’ღ
Android Architecture Component 앱 구조를 더 튼튼하 테스트에 용이하고 유지보수성이 뛰어나게 만들도록 하는 라이브러리의 모음
Android, ViewModel - AAC의 ViewModel 사용 방법 정리 ᕕ( ᐛ )ᕗ 와아ㅏ! 진성님 블로그다!! 👏
==> 안드로이드 스튜디오 4.1 기준 AAC ViewModel 초기화를 순서대로 확인해볼 수 있습니다.
대체 -> Koin을 사용한 MVVM 패턴 사용해 보기
https://velog.io/@wlsdud2194/what-is-di
Dependency Injection : 의존성 주입
[링크 참고] 아래 코드에서 볼 수 있듯 Programmer
클래스에서 startProgramming
함수가 호출되기 위해서는 Coffee
클래스가 필요. 이것을 Programmer 클래스는 Coffee 클래스의 의존성을 가진다 라고 합니다.
// Programmer.java
class Programmer {
private Coffee coffee;
public Programmer() {
this.coffee = new Coffee();
}
public startProgramming() {
this.coffee.drink(); // 일단 마시고 시작하자
...
}
}
https://velog.io/@wlsdud2194/what-is-di
// Programmer.java ====의존성 주입 하면====
class Programmer {
private Coffee coffee;
// 그 날 마실 커피를 고를 수 있게된 개발자
public Programmer(Coffee coffee) {
this.coffee = coffee;
}
public startProgramming() {
this.coffee.drink();
...
}
}
https://velog.io/@wlsdud2194/what-is-di
Hilt는 Android용 종속 항목 삽입 라이브러리.
Hilt는 프로젝트의 모든 Android 클래스에 컨테이너를 제공하고 수명 주기를 자동으로 관리함으로써 애플리케이션에서 DI를 사용하는 표준 방법을 제공합니다. Hilt는 Dagger가 제공하는 컴파일 시간 정확성, 런타임 성능, 확장성 및 Android 스튜디오 지원의 이점을 누리기 위해 인기 있는 DI 라이브러리 Dagger를 기반으로 빌드되었습니다.
+Hilt 및 Dagger를 참조
Dagger Hilt - What
: 처음 Dagger Hilt를 입문하는 사람들을 위한 Quick-Start Guide가 첨부되어 있다.
HiltAndroidApp
- 해당 annotation은 구성 요소에 붙여줘야 하는 모든 모듈의 진입점AndroidEntryPoint
- Activity, Fragment, View, Service, BroadCast Receiver 등에 사용InstallIn
- 모듈에 컴포넌트 추가Components
- lifecycle
ViewModelInject
- 해당 annotation을 ViewModel에 붙여주기만 하면 자동으로 주입이 가능
[viewModelInject.kt —>viewModelInjectActivity.kt ]WorkerInject
- 해당 어노테이션이 달려있는 클래스를 모두 찾아서 WorkManager
와 함께 worker
를 주입하는데 사용할 수 있는 HiltWorkerFactory를 생성여러 가지 실습을 해보고자 찾아보았습니다.
해당 내용을 가장 먼저 찾았지만 이해하기 어려워 다른 내용을 찾아보았습니다. 비교적 간단한 예제들을 먼저 보는 것이 좋은 것 같습니다.
LiveData를 통해 화면이 가로와 세로 변경이 되어도 어떻게 데이터를 유지하는지 알 수 있는 예제입니다.
안드로이드 ADB를 사용.
이 예제는 liveData가 어떤 건지 확인해 보고자 학습해보았습니다.
저장 가능
데이터베이스와 함께 작동하여 단어를 가져오고 저장합니다.
표시하는 모든 단어는 MainActivity
의 RecyclerView
에 있습니다.
Activity
사용자가 단어를 입력하면 앱이 해당 단어를 데이터베이스에 추가 한 다음 목록이 자동으로 업데이트됩니다.
번호가 매겨진 버튼 중 하나와 상호 작용할 때마다 로그가 생성되고 저장됩니다. **모두보기 화면에서 이전의 모든 상호 작용의 목록이 표시됩니다. 로그를 제거하려면 로그 **삭제 버튼을 누릅니다.
이 코드 랩에서는 Room 을 사용 하여 로컬 데이터베이스에 데이터를 저장 하는 애플리케이션에 Hilt를 추가 합니다.
연락처(Contacts) 리스트를 보여주는 예제. 연락처 목록과 추가의 두 개의 액티비티를 가집니다.
목록 안에는 RecyclerView로 연락처가 나열되고, 새 연락처를 추가하면 자동으로 추가/정렬됩니다.. 리스트의 연락처를 클릭하면 편집할 수 있고, 길게 누르면 삭제할 것인지 다이얼로그를 보여줍니다.
해당 예제는 아직 살펴보는 중입니다!
https://github.com/dahyun1226/mvvm1212 ᕕ( ᐛ )ᕗ 와아ㅏ! 다현님 실습 프로젝트다!! 👏
AAC의 ViewModel /LiveData / DataBinding 을 사용한 MVVM 패턴+ Koin 을 사용하여 의존성을 없앤 프로젝트입니다.
ᕕ( ᐛ )ᕗ 와아ㅏ! 진성님 실습 프로젝트다!! 👏
진성님 블로그를 좀 더 열심히 읽어보려고 합니다. :)
#### reference
---
// Codelabs
https://developer.android.com/codelabs/android-hilt?hl=ko#0
https://developer.android.com/codelabs/kotlin-android-training-view-model#0
https://developer.android.com/codelabs/kotlin-android-training-live-data-data-binding?hl=en#1
https://developer.android.com/codelabs/android-training-livedata-viewmodel#1
//Mediums articless
https://medium.com/swlh/mvvm-with-hilt-rxjava-3-retrofit-room-live-data-and-view-binding-8da9bb1004bf
- Pokemon github: https://github.com/abhinav0612/Pokemon
https://medium.com/hongbeomi-dev/dagger-hilt-%EC%B2%AB-%EA%B1%B8%EC%9D%8C-daaa925deca4
//blog,tistory
https://blog.yena.io/studynote/2019/03/16/Android-MVVM-AAC-1.html
https://woovictory.github.io/2019/06/10/Android-MVVM/
https://blog.yena.io/studynote/2019/03/27/Android-MVVM-AAC-2.html
https://deque.tistory.com/108
//+ Dagger Hilt MVVM
https://github.com/gabriel-TheCode/Dagger-Hilt-MVVMs
//git
https://github.com/dahyun1226/mvvm1212