- โฐ ์ผ์ : 2019. 12. 21 (ํ )
- ๐ ์ฃผ์ต : GDG Korea Android
- โณ ์ฅ์ : Google Campus for Startups
- ๐ ๋งํฌ : https://festa.io/events/744
- ์ต๊ทผ์ ๊ณ ๋ฏผํ๋ ํ ํฌ๋์ปฌํ ๋ฌธ์ ๋ค์ ๋ํ ํด๋ต์ ๋ค์ ์ ์๋ ๋จ๋น๊ฐ์ ํ์ฌ์๋ค.
- ๊ฐ์ธ์ ์ผ๋ก ์ปจ๋์ ์ด ๋์ ์ํ์๋๋ฐ ์์์ผ๋ฉด ํํํ ๋ป ํ๋ค.
- ๐ค ๋ฐํ์ : ๊ถํํ ์นด์นด์คํ์ด
- ๐ ๋ฐํ์๋ฃ : ๋ค์ด๋ก๋
- โ๏ธ ์์ฝ
- AndroidX Security Library ์๊ฐ
- ๋น์ฅ ์ด์ ์ด๊ฑฐ ์ฐ๋ค ์๋๋ฐ.. ๋ฐ๊ฐ๊ธฐ๋ ํ๊ณ ๋ฌํ๊ธฐ๋ ํ๊ณ ..
-
Android Security Library ๊ฐ์
- MinSDK 23
- alpha2
- ์ํธํ ๊ด๋ จ(ํ์ผ ๊ด๋ จ, KeyAlias ์์ฑ)
- ๋คํธ์ํฌ๋ DB๋ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค.
-
Google Tink๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
- ์ฐ๋ฆฌ๊ฐ ์ํธํ ๊ฒ์ํ๋ฉด ๋์ค๋ '๊ทธ ์ฝ๋'๊ฐ ๋ค์ด์๋ค.
-
EncryptedSharedPreferences
- ์์ฑ๋ง ๋ฌ๋ผ์ง๊ณ ๋๋จธ์ง ์ฝ๊ณ ์ฐ๋ ์ฝ๋๋ ๋์ผํ๋ค.
- KeyAlias ๋ง ์ฃผ์ํ๋ฉด ๋๋ค. (๋ฐ๋๋ฉด ๋ชป ๋ณตํธํ๋ฅผ ๋ชปํ๋๊น)
-
EncryptedFile
- ์์ฌ๋ง ๋ฌ๋ผ์ง๊ณ bufferRead, bufferWrite ๊ทธ๋๋ก ์ด๋ค.
-
์ฃผ์์ฌํญ
- masterKeyAlias๋ String ๋ณ์์ด๋ค.
- ๋ณ๊ฒฝ๊ฐ๋ฅํ๊ณ ๋์์ ๋ฌธ์ ๋ ์์ง๋ง, MasterKeys ์ฌ์ฉ์ ๊ถ์ฅ.
-
EncryptedFile ์ ๋์ผํ ์ด๋ฆ์ ํ์ผ์ ๋ฎ์ด์์ธ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํ๋ค.
-
Biometric Authentication
- ์ง๋ฌธ์ธ์, ์ผ๊ตด์ธ์ ๋ฑ ์์ฒด์ธ์
- MinSdk 23
- ํ์ ์ด ๋ฌ๋ค.
- ์ผ๊ตด์ธ์์ ์ต์ข ์ปจํ์ ๋ฐ๋๋ค.(ํฝ์ ๋ฒ๊ทธ๋๋ฌธ์ธ๊ฐ?)
- ์ง๋ฌธ์ธ์๋ง ์ธ ์ ์๋ค. (๊ฐ๋ฐ์๊ฐ ์ง์ ํ์ง ๋ชปํ๊ณ ์ฌ์ฉ์๊ฐ ์ค์ ํ ์์ฒด์ธ์ ๋ฐฉ์์ด ๋ฌ๋ค.)
-
๋ณด์ ์์ฒด์ ๋ํ ๋ด์ฉ์ ๋ณ๋์ ํ์ต์ด ํ์ํ ์๋ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
- Q. KeyAlias ๋ ๋๋ฐ์ด์ค ์์ค์ธ์ง? ์ค์น ์์ค์ธ์ง?
- A. ์ค์น์์ค
- ๐ค ๋ฐํ์ : ๋ ธํ์ ๋ค์ด๋ฒ
- ๐ ๋ฐํ์๋ฃ : ๋ค์ด๋ก๋
- โ๏ธ ์์ฝ
- ์๋๋ก์ด๋ ์คํ๋์ค v3.6 ๋ฐ v4.0 ์ ์๋ก์ด ๊ธฐ๋ฅ ์๊ฐ
- ์ธ์ ๋์ฒ๋ผ ๋น ๋ฅด๊ณ ์์ฐฌ ๋ด์ฉ๋ค์ด์๋ค. ๋์ค์ ๋ฐ๋ก ๋ฐํ์๋ฃ ๋ณด๋ฉด์ ๋ณต์ตํด์ผ์ง...
- 4.0 ์์ build.gradle
- ๋ํ๋์ ์๋ก์ด ๋ฒ์ ์ฐพ๋ ๊ธฐ๋ฅ ๊ฐ์
- BuildSpeed
- ์ด๋์ ๋น๋ ์๊ฐ์ ์ก์๋จน๋์ง ์๊ฐ์ ์ผ๋ก ํ์ธ ๊ฐ๋ฅ
- ๋น๋์๋ ๊ฐ์ ๋ฐ ํ์ธ ๊ฐ๋ฅ
- Multi Preview
- ๋ฉํฐ ๋๋ฐ์ด์ค, ๋ฉํฐ Locale, Color Blind Mode ๋ฑ
- Split View ๋ฒํผ์์น๊ฐ ์ขํ๋จ์์ ์ฐ์ธก์๋จ์ผ๋ก ๋ณ๊ฒฝ
- Desugraring
- ์ต์ API Level์ ์๊ตฌํ์ง ์๊ณ Java 8 API ์ฌ์ฉ๊ฐ๋ฅ
- ๋ณ๋์ Library ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒ ๋๋ค.
- build.gradle ์์ ์ค์ coreLibraryDesugaringEnabled ๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ ์ ์๋ค.
- View Binding
- findViewById ๋์ฒด ๊ฐ๋ฅ
- ์๋ชป๋ ID๋ก ์ธํ NPE ๋ฐ์ ์ฐ๋ ค๊ฐ ์๋ค.
- ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ ๋ง๋ฅ xml์ ๊ฐ์ง๊ณ ๋ทฐ์ ๋ํ ์ฝ๋๊ฐ ์์ฑ๋์ด ์ฐธ์กฐ ๊ฐ๋ฅ.
- ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ๊ณผ ์ฌ์ฉ๋ฐฉ๋ฒ๋ ๋น์ท
- ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ ์ฒ๋ผ ์์์ ๋ถ๊ฐ๋ฅ.
- findViewById ๋์ฒด ๊ฐ๋ฅ
- Android Jetpack Compose
- Declaritive UI
- Preview๋ ์ง์
- ๋คํฌ๋ชจ๋, ์ํ์ ๋ฐ๋ฅธ ๋ณํ๋ ์ ๋ถ ๋ณผ ์ ์๋ค.
- pre alpha ์ด๋ฏ๋ก
- Debugging
- ๋๋ฒ๊น ์ค ๋ธ๋ ์ดํฌํฌ์ธํธ ๋ผ์ธ์ ์ง๋์ณค์ ๋?
- ApplyChange ๋ฅผ ์ด์ฉํ๋ฉด ๋๋ฒ๊น ์ค์ ์ฝ๋ ์์ ๊ฐ๋ฅ
- Layout Inspector
- MotionLayout ๋ฑ ๋ ์ด์์์ 3D๋ทฐ๋ก ๋ณผ ์๋ ์๋ค.
- Motion Editor
- ConstaintLayout์ MotionLayout์ผ๋ก ์ปจ๋ฒํธ ๊ฐ๋ฅ.
- ๐ค ๋ฐํ์ : ์๋ช ์ฑ ์นด์นด์ค
- โ๏ธ ์์ฝ
- ๋จธํ ๋ฆฌ์ผ ๋์์ธ์ ์ ์ฉ์ ์ํ ํ ๋ง์ฌ์ฉ๋ฒ
-
์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ
-
ํ ๋ง VS ์คํ์ผ
- ์คํ์ผ์ ๋ทฐ์ ์์ฑ๋ค์ ๊ฐ๊ฐ ๋ทฐ๋ง๋ค ์ค์
- ํ ๋ง๋ ๋ทฐ์์ฑ์ด ์๋ ํ ๋ง์์ฑ์ ํค๋ก ์ฌ์ฉํ๋ค.
- ํ ๋ง๋ฅผ ์ฐธ์กฐํ ๋๋ ?attr/ ๋ก ์ฌ์ฉ (?๋ ํ์ฌ ํ ๋ง)
-
ํ ๋ง๋ ์ปจํ ์คํธ์ ์ฐ๊ฒฐ๋๋ค
- closestViewContext๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉ๊ฐ๋ฅ.
-
ํ ๋ง๋ ๊ณ์ธต๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
- ํ ๋ง๋ฅผ ๋ทฐ์ ์ ์ฉํ๋ฉด ํ์๋ทฐ์ ์ ๋ถ ์ ์ฉ ๋๋ค.
- ํ ๋ง๋ ์์๋๊ณ , ์์์ด ์์ฑ์ override ํ์ฌ ์ฌ์ฉํ๋ค.
- ํ ๋ง ์ค๋ฒ๋ ์ด๋ฅผ ์ด์ฉํ์ฌ ๋ณ๊ฒฝ๋๋ ์์ฑ๋ง ์ ์ธํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
- ๋คํฌ๋ชจ๋์์ ๋ผ์ดํธ๋ชจ๋๋ฅผ ์ค๋ฒ๋ ์ด ํ์ฌ ํน์ ๋ถ๋ถ๋ง ๋ผ์ดํธ๋ชจ๋๋ก ๋ณด์ฌ์ฃผ๋ ๋ฑ์ ์ ์ฐํ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.
-
ํ ๋ง๋ฅผ ์ฌ์ฉํ๋ ์คํ์ผ, ์คํ์ผ์ ์ฌ์ฉํ๋ ํ ๋ง๋ ๊ฐ๋ฅ
-
์ปฌ๋ฌํ๊ทธ์์๋ ๋ค๋ฅธ ์ปฌ๋ฌํ๊ทธ๋ฅผ ์ฐธ์กฐํ ์ ์์ง๋ง ํ ๋ง๋ ์ฐธ์กฐ๋ถ๊ฐ
-
Color state list๋ฅผ ์ด์ฉํ์ฌ Stateful Wrapper์ฒ๋ผ ์ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ์์์ ์ค์ ํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
-
color state list์์ ์์์๋ถํฐ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฏ๋ก ์ ์
-
์ํ๊ฐ๋ง ๋ค๋ฅธ color ๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์ธํ๋ ๋์ color statelist ๋ฅผ ์ด์ฉํ์ฌ ์ํ๊ฐ๋ง ๋๊ฒจ์ ์ฌ์ฉํ ์ ์๋ค.
-
๊ตฌ๊ธ์์ ๊ถ์ฅํ๋ ๊ฒ์ ๋ฌธ์๊ทธ๋๋ก์ ์ด๋ฆ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ถ์ฅ
- O : blue_500, pink_250, ...
- X : primary, primary_dark, ...
-
์คํ์ผ ์ด๋ฆ์ . ์ผ๋ก ๋จ์๋ณ๋ก ๋ค์ด๋ฐํ๋ฉด ์์์ ์์ ๊ฐ๋ฅ
-
๋คํฌํ ๋ง
- AppCompat์์ ์ด๋๊ฒ์ ์ฌ์ฉํ ๊ฒ์ธ์ง ์ค์
- ์คํ์ผ์์ ํ๋์ฝ๋ฉ ๋ ์์์ด ์๋ค๋ฉด ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ ๋ง๋ จ
- ๐ค ๋ฐํ์ : ์ด์ฐ์ถ ์นด์นด์คํ์ด
- โ๏ธ ์์ฝ
- LiveData๋ฅผ ์ด์ฉํ MVVM ๊ตฌ์กฐ์์ ์ฝ๋ฃจํด ํ์ฉ๋ฒ
- ์ฌ๋๋ง๋ค Layered architecture ์ ๊ด์ ๊ณผ ๊ตฌํ์ฒด๊ฐ ๋ค๋ฅด๋ค.
- Scope ์ค์ ์ ๋ช ํํ๊ฒ ์ ์ฐ๋๊ฒ์ด ํ์ ์ ์ข๋ค.
- LifecycleScope
- ApplicationScope or WorkManager
- ์.. ์ฝ๋ฃจํด ๊ณต๋ถํด์ผ๊ฒ ๋ค...
- ๐ค ๋ฐํ์ : ์์ฑ์ฉ ๋ค์ด๋ฒ
- ๐ ๋ฐํ์๋ฃ : ๋ค์ด๋ก๋
- โ๏ธ ์์ฝ
- ์ํฌ๋งค๋์ ๊ฐ ๋์ค๊ฒ ๋ ๋ฐฐ๊ฒฝ๋ถํฐ ์ฌ์ฉ๋ฒ๊ณผ ๋ฒ์ ๋ณ ์ง์๊ธฐ๋ฅ๋ค ์๊ฐ
- Before WorkManager
- AlarmManager
- JobScheduler
- Doze Mode
- GCMNetworkManager
- android-job
- JobDispatcher
- WorkManager
- AlarmManager + JobScehduler (+GCM)
- ์ ํธํฉ
- WorkManager DB์
- DB์ ์ ์ฅํ๊ธฐ๋๋ฌธ์ ๊ฐ์ ์ข ๋ฃ๋ฅผ ํด๋ ๋ฆฌ์ค์ผ์ฅด๊ฐ๋ฅ
- enqueue ๋ ์์ง๋ง ์ฒด์ด๋๋ ๊ฐ๋ฅ (๋น๊ธฐ๋with)
- ์กฐ๊ฑด์ ๋ง๊ฒ cancel๋ ๊ฐ๋ฅ (์ด๋ฆ, id, tAg)
- Worker
- Worker, RxWorker, CoroutineWorker
- Initializer
- ContentProvider ๋ผ์ Application oncreate ์ด์ ์ ์คํ
- On Demand๋ก ์คํ๋ ๊ฐ๋ฅ
- Worker Progress
- ๊ฒฐ๊ณผ ๋ฟ ์๋๋ผ progress ๋ ์ ๋ฌ ๊ฐ๋ฅ
- setProgress๋ก ํ๋ก๊ทธ๋ ์ค๋ฅผ ์ค์ ํ๊ณ ์ด๊ฑธ ๋ฐ์์ ์ฒ๋ฆฌํ๋ฉด UI์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅํ๋ค.
- worker๊ฐ running state์ผ๋๋ง ์ฌ์ฉํ๋๋ก ์ ์ํ๋ค.
- Foreground Worker
- ์ค๋๊ฑธ๋ฆฌ๋ ์์ ์ ํฌ์ด๊ทธ๋ผ์ด๋๋ก ๋๊ฒจ์ ์ฌ์ฉ์์๊ฒ ๋ช ์๊ฐ๋ฅํ๊ณ ์ค๊ฐ์ ์ทจ์๋ ๊ฐ๋ฅํ๋ค.
- setForeground ๋ก Notifictaion ์ค์ ํ์ฌ ์์ฑ ๊ฐ๋ฅ.
- ๐ค ๋ฐํ์ : ์ด์น๋ฏผ ๋ฑ ํฌ์๋ฌ๋
- โ๏ธ ์์ฝ
- DI๊ฐ ๋ฌด์์ธ์ง์ DI๋ฅผ ์จ์ผํ๋ ์ด์
- Koin vs Dagger ๋น๊ต
- DI(์์กด์ฑ ์ฃผ์
)
- ๋ค๋ฅธ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ํ๋ ์์กด์ฑ
- ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํด์ ์ฐ๋ ๋์ ์, ๋ค๋ฅธ๊ณณ์์ ์์ฑํ๊ณ ์ ๋ฌ๋ฐ๋ ๊ฒ์ ์๋ฏธ
- ์ DI๋ฅผ ์จ์ผ ํ๋๊ฐ?
- ์ฌ์ด ๋ฆฌํฉํ ๋ง
- ๋์ ์ฌ์ฌ์ฉ์ฑ
- ์ฌ์ด ํ ์คํธ
- ๊ฒฐ๋ก ์ Loosed coupling!!
- DI ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋น๊ต
- Manual DI
- ๊ฒฐ๋ก ์ ์ผ๋ก ์กํฐ๋นํฐ/ํ๋๊ทธ๋จผํธ์์ ์์ฑํ๊ฒ ๋จ
- Koin
- Service Locator
- ๋ฐํ์์ ํ์ ์ฒดํฌ๋ฅผ ํ๋๋ฐ ์ด๊ฒ์ด ์ฅ์ ์ด์ ๋จ์
- Dagger
- Generated Code
- ์ปดํ์ผ ํ์ ์ฒดํฌ
- ๋์ ํ์ต๋น์ฉ
- ์ฑ ์ฌ์ด์ฆ๊ฐ ์ปค์ง์๋ก ์ ๋ฆฌํด์ง๋ค.
- Manual DI
- Dagger ๊ตฌ์ฑ
- Module
- Bind / Provide
- Component
- AndroidInjector
- Google Guide
- Dagger support Kotlin