6. DataBinding
- 바인딩 객체를 이용한 코드와 레이아웃의 디커플링
- findViewById() 사용할 필요가 없음
- Observable객체를 이용한 데이터 변경 감지 및 UI업데이트
- 레이아웃 xml에서 간단한 조건식을 사용한 값 대입
- NullPointerException 방지
- BindingAdapter 애노테이션을 활용한 사용자 지정 Setter
7. LifeCycles
- 생명주기와 관련된 작업들을 정리하고 가볍게 처리
- 메모리 누수나 생명주기와 관련된 크래시 방지
- 단독으로 사용하기보다는 LiveData나 ViewModel과 사용하길 권장
8. LiveData
- 항상 최신의 데이터를 얻을 수 있음
- 싱글톤 패턴등을 이용한 전역적 데이터 공유 가능
- 수동적인 생명주기 관리 필요없음
- UI와 data간의 동기화를 보장
9. ViewModel
- 디바이스 회전과 같은 환경변화로 인한 UI컨트롤러 재생성에서도 살아남음
- 하나의 액티비티와 다수의 프레그먼트를 갖는, Master - Detail 같은, 구조에서
프레그먼트간의 소통을 위한 interface설계가 필요없음.
- Lifecycle객체를 참조하면 절대 안 된다.
- 아주 간단한 생명주기를 가지고 있다. onCleared()
- 기존 Loader 클래스를 대체 가능
10. Room
- Room은 SQLite를 기반으로 한 추상화된 계층
- 기존 SQLite 다루는 방법보다 간결함
- 질의에 대한 결과값으로 LiveData 또는 Flowable등과 같은 Observable객
체를 받을 수 있음.
- DAO패턴 사용 강제. like Retrofit
- 간단한 Query는 할 줄 알아야 함. (컴파일시간에 문법오류를 검사함)
- Realm vs Room => ?
퍼포먼스 벤치마크, 장단점
11. Paging
- 점진적인 데이터 로딩
- RxJava2 또는 LiveData와 함께 사용 가능
- Local, Remote 모두 사용 가능
- RecyclerView + PagedList + PagedListAdapter 으로 UI구성
12. WorkManager
- 백그라운드 작업(Work)을 WorkManager에게 위임하는 방식 (Fire-and-forget)
- 앱이 종료 되어도 작업이 수행되는것을 보장
- 연계작업, 반복작업 수행 가능
- 환경이 변할때 작업 수행 가능(네트워크 연결상태, 충전상태, 내부용량 부족 등)
- Work 객체 생성시 기본생성자만 이용
- 인자 전달 시 inputData, outputData 이용(Primitive type only)
- Progress Bar 등의 UI를 업데이트하는데는 적합하지 않음.
- Work 체이닝시 간헐적으로 Blocked되는점 확인.
14. Navigation
- 기본적으로 하나의 Activity(NavHostFragment)와 여러개의 Fragment의 UI를
구성하는것을 지향함
- 하나의 NavHostFragment에 여러개의 CustomFragment를 트랜잭션 하는 방
식
- Fragment간 이동시 백스택을 자동으로 관리해줌
- Bundle을 통한 인자 전달 가능, 트랜지션 애니메이션기능 제공
- Shared Element Transition 미지원
- Nested Navigation Graph 기능 지원
- 시각적 다이어그램 제공으로 UI-Flow를 쉽게 확인할 수 있음
- Dagger2와 사용시 문제가 생길 수 있음.
16. Constraint Layout
- RelativeLayout 보다 풍부한 표현력
- flat한 구조로 더 나은 성능
- API9 이상부터 사용가능
- 제약 조건(Constraint)
방정식(Equation)
해법(Solver) 으로 구성
- iOS Autolayout과 비슷
- 반응형 레이아웃으로 재사용 증가
17. Kotlin
- NullPointerException으로 부터 해방
- extension
- Higher-order functions / 람다식
- Data 클래스
- 자바 라이브러리와의 100% 호환
- lateinit, lazy, let() , apply(), also(), run()... 등등
장점 -> 생산성 증가
단점 -> 학습곡선, 클린빌드속도, 외부 정적분석툴 부재, 돌아갈수 없는 강(?)
18. RxJava
- 데이터의 흐름을 정의하고 데이터가 변경되었을 때 업데이트
- pull방식에서 push방식으로 바꿈
- Side Effect(부수효과)가 없음.
- 순수 함수 지향
- 우아한 비동기 처리