JetPack
안녕하세요 스윗트래커 모바일팀 KJ입니다.
안드로이드는 발전해 오면서 큰 문제들을 가지게되는데 첫번째로는 파편화, 두번째로는 라이프사이클에 의한 많은 예기지 못한 상황들이 있습니니다.
위와같은 상황을 보다 잘 대처할 수 있게 드디어 구글에서 컴포넌트와 가이드라인을 제공해주는것이
JetPack
입니다.
젯팩은 쉽게 개발하기 위한 ‘안드로이드 컴포넌트 집합’ 이며
androidx.*
패키지 라이브러리로 구성되고
기존 안드로이드 플랫폼보다 자주 업데이트 될것이며, 최신 젯팩 구성요소에 액세스 할 수 있다.
빠르게 살펴보면 JetPack 공식 문서에서 보여주는 그 구성요소들은 아래와 같습니다.
이와같이 Fundation, Architecture, Behavior, UI 크게 4가지로 나눠지며 이 중에는 이미 자신도 모르게 사용하는 컴포넌트 들도 있을 것 입니다.
- 안드로이드 하위 호환성 및 테스트를 위한 AppCompat, Test, Android KTX 등
- 안드로이드 내부적 설계를 위한 Databinding, Lifecycles, LiveData, Room , Viewmodel, WorkManager 등
- 알림, 권한 등을 위한 Notification, Permission, Preferences 등
- UI구성 요소들인 Anination, Fragment, Layout 등
그렇다면 젯팩 컴포넌트들을 사용할때 어떤 이점이 있을까요?
이번글에서는 간결함을 주는 ‘KTX’ 하나만 살짝 알아보겠습니다
Android KTX는 Kotlin 언어 기능을 활용하여 자연스러운 표현을 사용하면서 더욱 간결하고 즐겁게(?)
Kotlin을 개발 할 수 있도록 만들어졌습니다.
그럼 정말 KTX 가 간결함과 즐거움을 줄지 예제코드로 알아보겠습니다.
- SharedPreferences
KotlinsharedPreferences.edit() .putBoolean("key", value) .apply()
Kotlin KTX
sharedPreferences.edit { putBoolean("key", value) }
- Listener
Kotlinview.viewTreeObserver.addOnPreDrawListener( object : ViewTreeObserver.OnPreDrawListener { override fun onPreDraw(): Boolean { viewTreeObserver.removeOnPreDrawListener(this) actionToBeTriggered() return true } } )
Kotlin KTX
view.doOnPreDraw { actionToBeTriggered() }
- SQL Lite
Kotlindb.beginTransaction() try { // insert data db.setTransactionSuccessful() } finally { db.endTransaction() }
Kotlin KTX
db.transaction { // insert data }
- Fragment
KotlinsupportFragmentManager .beginTransaction() .replace(R.id.my_fragment_container, myFragment, FRAGMENT_TAG) .commitAllowingStateLoss()
Kotlin KTX
supportFragmentManager.transaction(allowStateLoss = true) { replace(R.id.my_fragment_container, myFragment, FRAGMENT_TAG) }
개인적으로는 .commit()이나, .apply(), Listener등록 시에 불필요하게 생기는 boilerplate code들을 DSL스타일의 고차함수를 사용하여 보다 클린한 코드를 만들어주는것 같습니다.
젯팩 각 요소마다 그 요소가 가져오는 장점이 있으며
가장 큰 변경점은 구글에서 개발자에게 개발 아키텍처에 대한 가이드라인을 제시한 부분이 아닐까 싶습니다.
그래서 천천히 AAC-MVVM
에 대해 공부하고 적용해보려고 합니다.
추가적인 정보로는 구글에선 빠르게 안정적인 버전의 품질 향상을 위해 Gradle버전을 올려오고 있으며
3.2버전 부터는
- [Nacigation Editor]
- [새로운 머테리얼 디자인]
- [Android X 마이그레이션]
- [코틀린 릴리즈]
- 전후 2초정도의 스냅샷을 가지고 그 시점으로 이동 가능해진 [Emulator Snapshot]
- 배터리 소모를 추적할 수 있는 [Energy Profiler]
등 많은 기능들이 릴리즈 되어 개발에 더 도움을 줄것입니다.
스마트택배역시 이에 발빠르게 맞춰가기위해 지속적으로 업데이트를 반영하고 있으며
더 나은 환경을 위해 하나씩 알아가고 적용하려고 합니다.
읽어주셔서 감사합니다.
다음 블로깅 예정글은 [DataBinding활용] 또는 [코틀린문법 활용하기] 또는 [aac-mvvm] 입니다.