-
Notifications
You must be signed in to change notification settings - Fork 3
๐ Daily Scrum
ezhoon edited this page Nov 25, 2022
·
62 revisions
- Ground Rule
- ๋ช์๋ถํฐ ๋ช์๋ฅผ ์ฝ์ด ํ์์ผ๋ก ํ ์ง
- ๋ฐฅ์๊ฐ ๋ฑ๋ฑ
- Convention
- Git, Resource, Kotlin ์ปจ๋ฒค์
- Setting
- ktlint ์ ๊ทน ํ์ฉ
- ๋ฉํฐ๋ชจ๋ ํ์ฉ
- ํด๋ฆฐ ์ํคํ ์ฒ ๊ธฐ๋ฐ
- gradle -> kts ๋ง์ด๊ทธ๋ ์ด์
์ ์ฉ
- ์ฌ๋ฌ import ๊ตฌ๋ฌธ๋ค List๋ก ํฉ์ณ์ Boilerplate Code ์ ๊ฑฐ
- ์ฒซ์ฃผ๋ ์์์ผ 20์์ ๋ง๋จ์ ๊ฐ๊ธฐ๋ก ๊ฒฐ์
- ํ์ฌ ์ฐ๋ฆฌ๊ฐ ๊ตฌํ ์์ ์ธ ํ๋ก์ ํธ์ ๋ํด์ ๊ฐ๋ตํ๊ฒ ์ค๋ช
- ์ฌ์ฉ์๊ฐ ์ธ์ฆ์ ํ๊ฒ ๋๋ฉด ๊ถํ์ ์์ฒญ
- ๊ถํ์ ๋ฐ์ง ์์ ๊ฒฝ์ฐ
- ํ ํ๋ฉด ์๋จ์ ์์น ์ ๋ณด๋ฅผ ์์ฒญํ๋ UI
- ์์น ๊ถํ์ด ์๋ ๊ฒฝ์ฐ
- ํ ํ๋ฉด ์๋จ์ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ฅธ ๊ธฐํํฐ์ฝ ๋ชฉ๋ก UI
- ๊ธฐํํฐ์ฝ ์ถ๊ฐ์ ๋์์ ํด๋น ๋ธ๋๋๋ฅผ DB์ ์ ์ฅ
- ์นด์นด์คํก, ๋ฉ์ธ์ง ๋ฑ์์ ์ด๋ฏธ์ง ์ ๋ฌ์ ํตํด ์ถ๊ฐ
- ์ฑ ๋ด์์ + ๋ฒํผ์ ํตํด ์ถ๊ฐ
- ๊ฐค๋ฌ๋ฆฌ๋ก ์ด๋
- ๋ฐ์ฝ๋ ๋ฒํธ๋ฅผ ์ด์ฉํ์ฌ ์ค๋ณต๋ ๊ธฐํํฐ์ฝ ํ์ธ
- ์๋์์ฑ
- ์นด์นด์คํก, ํคํํฐ์ผ, ์๋ฝ, ์ก์ ๊ธฐํํฐ์ฝ ์ด๋ฏธ์ง์์ ์๋ ์ถ์ถ
- ์ฑ๊ณต์, ์ด๋ฏธ์ง๊ฐ ๋ง์์ ๋ค์ง ์์ผ๋ฉด ์๋์ผ๋ก ์์ ๊ฐ๋ฅ
- ์คํจ์, ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋๋๊ทธ๋ฅผ ํตํด ์ด๋ฏธ์ง ์ถ๊ฐ
- ๋ชจ๋ ํ ์คํธ ๊ธ์ด ์์ AutoCompleteTextView
- ํ๋ฉด > Epic > Story > Task - ๊ฐ๋ฐ ์ฐ์ ์์ - ์์ ์์์๊ฐ - ์คํ๋ฆฐํธ
- ๋๋ฉ์ธ ๋ชจ๋ธ(๊ณตํต)
- ๊ฐ์ ์ฌ์ฉํ ๋ชจ๋ธ
- ์กฐ์จ
์๋๋งค๋์ - ์ํฌ๋งค๋์
- Android Studio ์ด์ ์ฐ๋
- Projects ์ฌ์ฉ๋ฒ ๊ณต์
- Milestone ์ฌ์ฉ๋ฒ ๊ณต์
- Projects, Milestone ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์
- PR approve ํ ์คํธ
- PR Template ์ถ๊ฐ
- ๋ชจ๋์ ๋ฐ๋ฅธ Model ์ด๋ฆ ์ปจ๋ฒค์ ์ ์
- Domain ๋ชจ๋์ Model๊ณผ Usecase ์ ์
์ด์ ๋ผ๋ฒจ ์ถ๊ฐ
- feat : ๊ธฐ๋ฅ ๊ฐ๋ฐ
- refactor : ๋ฆฌํฉํ ๋ง
- fix : ๋ฒ๊ทธ / ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์์
- bug : ๋ฒ๊ทธ ์กด์ฌ
- style : ๋ ์ด์์, ์ปจ๋ฒค์
์์
- chore : ์ก์ผ ex) gradle dependency
- test : ํ
์คํธ์ฝ๋ ์์ฑ
- docs : ๋ฌธ์ ์์
PR Template
resolved #number
## ์์
๋ด์ฉ
> ์ด๋ค ์์
์ ํ๋์ง ์ ์ด์ฃผ์ธ์!
## ์ฒดํฌ๋ฆฌ์คํธ
- [ ] Assignees ์ค์
- [ ] Labels ์ค์
- [ ] Projects ์ค์
- [ ] Milestone ์ค์
## ๋์ ํ๋ฉด
> ์กด์ฌํ์ง ์๋๋ค๋ฉด ํจ์คํด์ฃผ์ธ์!
## ๋ฒ๊ทธ
> ์กด์ฌํ์ง ์๋๋ค๋ฉด ํจ์คํด์ฃผ์ธ์!
๋ชจ๋ธ ์ด๋ฆ ์ปจ๋ฒค์ ์ ์
Data
Model (Room) / Data (Retrofit, Firebase)
Domain
PostFix ๊ฐ ์์
Presentation
UIModel
sealed class ์ ์์์ UIModel ์ ์๋ถ์
๊ฐ์ ์ด๋ฒ์ฃผ ์ด๋ค ๊ฒ์ ํ ์ง ์คํ๋ฆฐํธ ๊ณํ์ ๋๋ต์ ์ผ๋ก๋ง ์ด์ผ๊ธฐ๋ฅผ ํด๋ดค์ต๋๋ค!
- ์ : ์นด์นด์ค ์์น๋ก ์ฐพ์ ๋ธ๋๋ ์์น๋ค ๋ค์ด๋ฒ ๋งต์ ๋งํฌ ํด์ฃผ๊ธฐ / Beep Tech์ Mockk ๊ด๋ จ ์ ๋ฆฌ ๊ธ ์ฌ๋ฆฌ๊ธฐ
- ํ : ๋งต ํ๋จ ViewPager2 ์ ์ฉ (๊ธฐํํฐ์ฝ ์นด๋ ๋ทฐ)
- ์ : ์นด๋๋ฅผ ํด๋ฆญํ์๋ detail ํ์ด์ง ์ด๋ / ์นด๋๋ทฐ ์คํฌ๋กคํ ๋ ๋ธ๋๋๊ฐ ๋ณ๊ฒฝ ๋๋ฉด map์์ ์์น๋ ๋ณ๊ฒฝ
- ๋ชฉ : ํ์ฌ ์์น์ ๋ฐ๋ผ์ ๋ธ๋๋๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋๋ฐ ๊ฐ section์ ์ด๋ป๊ฒ ๋๋์ง ๊ณ ๋ฏผํ๊ณ flow ๊ทธ๋ ค๋ณด๊ธฐ
- ์ - (๊ธฐํํฐ์ฝ)์ธ๋ถํ๋ฉด xml ์์ฑ + ๊ธฐํํฐ์ฝ FakeRepository
- ํ, ์ - ์ธ๋ถํ๋ฉด ๊ด๋ จ Room DB ๊ตฌ์ถ
- ๋ชฉ - ์ธ๋ถํ๋ฉด๊ณผ Room ์ฐ๋
- ์: ์คํ๋์ ํ๋ฉด, ๊ตฌ๊ธ ๋ก๊ทธ์ธ ๋ณด์
- ํ: ์ง๋ฌธ ์ธ์
- ์: ์ง๋ฌธ ์ธ์
- ๋ชฉ: PIN ์ค์ ๊ด๋ จ ๊ณ ๋ฏผ ํ ๊ตฌํ์์ (์ด๋์ ์ ์ฅํด์ผ ํ๋๊ฐ? ์ํธํ๋ ์ด๋ป๊ฒ ํด์ผํ๋๊ฐ?)
- ์ : ๊ฐค๋ฌ๋ฆฌ ํ์ด์ง ๋ฐ ์ ํ ๊ตฌํ
- ํ : ํ ์คํธ์ผ์ด์ค junit5
- ์ : image crop ui ๊ตฌํ์์
- ๋ชฉ : ๊ตฌํ ์ ๋ฆฌ ๋ฐ ๋ณด๊ฐ
- ๊ฐ ํฐํธ๋ค string font styles ๋ง๋ค๊ธฐ
์๋ฒฝ ๋ด์ ์ฌ๋ผ์จ PR๋ค์ ๊ดํ ์ด์ผ๊ธฐ๋ฅผ ํ์ต๋๋ค.
-
๋ช ์
- PagingData cachedIn์ด ์ฌ์ฉ๋๋ ์ด์ ๊ฐ ๋ญ๊น
- ์ ๋ถ์ฌ๋ ์๋์ ๋๋๋ฐ, ์ฌ๋ฌ๋ฒ ์๋ค๊ฐ๋ค ํ๋ฉด ์ฑ์ด ํฐ์ง. ์๋ง ์บ์์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ํฐ์ง๋ ๊ฒ ๊ฐ์
- ์ด๋ป๊ฒ ๊ตฌํ๋์ด ์๋์ง ์ดํด๋ดค๋๋ฐ
shareIn
์ผ๋ก ๊ตฌํ๋์ด ์์ด์stateIn
์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ์๋ฏธ๊ฐ ์๋ ์ถ๋๋ผ๊ณ ์ -
collect
ํ ๋ ๊ฒฝ๊ณ ๋จ๋ ๊ฒ์ ์ฝ๋ฃจํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ด ์์ ์์ ๊ฒ์ด์ด์ ๊ทธ๋ฌ๋ ๊ฑฐ์์~
- cacheIn์ ๋ทฐ๋ชจ๋ธ์์ ํ๋ ๊ฒ ๋ง์๊น์?
- ๋ค. ๊ทธ์ ๋์ ๊ฐ๊ณต์ ๋ทฐ๋ชจ๋ธ์ด ๋ง์ ๋ฏ
- ์ ํ์ด์ง์ ์ฝ๋๋ก ๋๊ฒจ์ค๊น์?
- ํซ์ผ ๋๋ ์ ๋ถ ๋ค ๊ฐ๊ณ ์์ด์ผ ํ๋๊น ์ฝ๋๋ก ์ฃผ๋๊ฒ ์๋๊น์? ์ฝ๋๋ฉด ์กฐ๊ธ์ฉ ๋ค๊ณ ์์ด๋ ๋๋๊น์
- BindingAdapter๋ก ํซ ์คํธ๋ฆผ์ผ๋ก ๋ณ๊ฒฝํ์๋ ๊ฒ์ ์ญ์
- PagingData cachedIn์ด ์ฌ์ฉ๋๋ ์ด์ ๊ฐ ๋ญ๊น
-
๋ช ๋ฒ
- ์์ธํ๋ฉด์์ ๊ธฐํํฐ์ฝ ์ฌ์ฉ ๋ฒํผ์ ํ๋ฉด ํ๋จ์ ๋ถ์ด๋ ๋ชป์๊ฒจ์ ์นฉ์ผ๋ก ๋ณ๊ฒฝ. ๋ฒํผ์ด ํ๋ฉด ์๋์ ์์ ๋ ์นฉ์ ๋๋ฅด๋ฉด ์๋๋ก ์ด๋
- isVisible์ด setFlag๊ฐ ๋ ๋ invalidate ๋จ์ ํ์ธํจ
-
์งํ
- LocationManager -> FusedLocationProvider
- ์๊ฐ ๊ณ์ฐ์ 9์๊ฐ์ ์ค์ฐจ๊ฐ ์์ ๊ฑฐ์์ - ๋ช ์ -
- ์ง๋ฌธ ์ธ์ ๊ตฌํํ ๋ด์ฉ ๊ณต์
- FingerprintManager์ ๊ฒฝ์ฐ ์ง๋ฌธ ์ธ์ UI๋ฅผ
BottomDialog
๋ก ๋ง๋ค๊ณshow()
ํด์ค์ผ ์ง๋ฌธ ์ธ์ฆ์ ์์ํ ์ ์๋ค. - ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ํํ๋ก ์์ ํ ์์
- Mokk ๊ด๋ จ ์ ๋ฆฌ
- ์์น ์บ์ฑํ ์ด์ ์ ๋ฆฌ
- ์ฌ์ฉ์ ์์น ์ค์ฌ์ผ๋ก ๋๋ ์ง ๊ณ ๋ฏผ
- ๊ฒน์น๋ ์์ญ์ด ๋ฐ์ํ๋ค
- (์์ง) ์ขํ๋ฅผ ๊ฑฐ๋ฆฌ ๋จ์๊ฐ ์๋ ๋ชจ๋๋ฌ ์ฐ์ฐ์ผ๋ก ๊ทธ๋ฃนํ
- ๊ฐค๋ฌ๋ฆฌ ๊ตฌํํ ๋ด์ฉ ๊ณต์
- ์ฌ์ง ์ ํ ์ ์ ํ๋ ์ฌ์ง UI ๊ณ ๋ฏผ
- position ์ ๋๊ฒจ์ฃผ๊ณ NotifiItemChanged(position) ์ ํธ์ถํ๋ฉด ๋๊ธด ํ์ง๋ง ์ด๋ฏธ์ง์ ํจ๊ป ํ์๊ฒ ๊น๋นก๊ฑฐ๋ฆฌ๋ ํ์์ด ๋ฐ์ํ๋ค
- xml ์ selection ๊ฐ์ฒด๋ฅผ ๋ค์ ๋๊ฒจ์ค์ ์ฒ๋ฆฌํจ (๋ฉํ ๋๊ป ์ง๋ฌธ ์์ )
- ํ ์คํธ ์คํ์ผ ์ถ๊ฐ
- Material Theme ์ ์ฉ
- ๋ฒํผ ํ
๋ง ์ ๋จน๋ ๋ฌธ์ ๋ช
์๋ ๋์์ผ๋ก
MaterialButtonStyle
๋ก ์ง์ ํ์ฌ ํด๊ฒฐ - ํด๋ฐ ํ์ดํ์ colorOnPrimary ๊ฐ ๋จน์ง ์๋ ๋ฌธ์ ์กด์ฌ -> ๊ธฐ๋ณธ์ ์ผ๋ก title ์์์ theme ์ ๋ฐ๋ฅด์ง ์๊ณ ๊ฒ์ ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ ํ์ธ. ๋ฐ๋ก ์ง์ ํด์ผ ํ๋ค
- BottomSheetDialog ์์ Theme ์ด ์ ๋จน๋ ๋ฌธ์ -> BottomSheetDialog ๊ฐ ๋ฐ๋ก Theme ์ ๊ด๋ฆฌํ๊ณ ์๋ ๊ฒ์ผ๋ก ์ถ์
- ๋ฒํผ ํ
๋ง ์ ๋จน๋ ๋ฌธ์ ๋ช
์๋ ๋์์ผ๋ก
-
DatePickerDialog ๋ฅผ ์ฌ์ฉํ๋ ๋์ค ๋ฒํผ์ ์์ด ์ ์ฉ์ด ๋์ง ์๋ ๋ฌธ์
- ๊ตฌ๊ธ์ฝ๋[https://android.googlesource.com] ๋ฅผ ํ์ธ
- Dialog ๋ฅผ show ํ๊ธฐ ์ ์๋ AlartController ์์ inflate ๋ฅผ ํ์ง ์์ ์์ show ์ดํ์ ์ ์ฉํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐ
-
Handler(Looper.getMainLooper()) ๋ฅผ ์ด์ฉํ์ฌ biometricPrompt.authenticate ๋ฅผ ์คํ ํด์ผ ํ๋ ์ด์
- ์ง๋ฌธ ์ธ์์ ์์ฒญ ํ๋ ์ฝ๋๊ฐ Fragment ๊ฐ ์์ฑ๋ ๋ ์คํ์ ํ๋ค ๋ณด๋ Fragment์ Transaction๊ณผ biometric ์์ FragmentDialog ์ Transaction ๊ฐ๊ฐ์ด ์คํ์ด๋ ์ฑ์ด ์ฃฝ๋ ํ์์ ๋ฐฉ์งํ๊ธฐ ์ํด biometric ์ ์คํ์ ๋ฏธ๋ฃธ
- ์คํ๋ง ๋ฏธ๋ฃจ๋ฉด ๋๊ธฐ ๋๋ฌธ์ CoroutineScope(Dispatchers.Main).launch ๋ฅผ ์ด์ฉํ์ฌ ๋์ฒดํ๊ณ job ์ ์ด์ฉํ์ฌ ์ ๋ฆฌ
- activity๋ฅผ ๋ณ์๋ก ๋ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ activity.lifecycleScope.launch(Dispatchers.Main) ์ ์ฌ์ฉํ๋ฉด job์ ์ ๋ฆฌ ํ ํ์๊ฐ ์์
- activity.lifecycleScope.launch๋ฅผ ์ด์ฉํ๊ฒ ๋๋ค๋ฉด Dispatchers.Main.immediate ์ด๊ธฐ ๋๋ฌธ์ Transaction์ ์ถฉ๋์ด ์ผ์ด๋ฉ๋๋ค
- ์ธ์ฆ ๋ฐฉ์์ด ๋ฐ๋ก ์คํ์ด ์๋๋ผ ์ ํ์ ํ๋ ํ๋ก์ฐ๊ฐ ์๊ฒจ์ ์ด์ ๋์์ ๋ฏธ๋ฃฐ ํ์๊ฐ ์์ด์ก๋ค.
-
์ฝ๊ธฐ ํ๋ ์ฝ๋๋ ๊ฐ๋ฅํ๋ฉด ์ฃผ์๊ณผ ํ๋ก์ฐ๋ฅผ ์์ฑํ์
/*
* CropWindow ์ ๊ฐ๋ก์ ์ธ๋ก๊ฐ ํ๋ฉด์ 50% ์ดํ์ ํฌ๊ธฐ๊ฐ ๋๋ค๋ฉด,
* CropWindow ์ (1 <= a < 2) ์ ๊ฐ์ ๊ณฑํด๋ ํ๋ฉด ๋ณด๋ค ํฌ์ง ์๊ธฐ ๋๋ฌธ์ scale ์ด 1 ์ด์์ด ๋๋ค.
* 1.5 ๋ฅผ ๊ณฑํด ์ฃผ๋ ์ด์ ๋ ํ๋ฒ์ ๋๋ฌด ๋ง์ด ์ปค์ง๋ ๊ฒ์ด ๋ถ๋ด ์ค๋ฝ๊ธฐ ๋๋ฌธ์ด๋ค
*/
if (zoom < MAX_ZOOM && cropWidth < width / 2f && cropHeight < height / 2f) {
val scaleW = width / cropWidth * 1.5f
val scaleH = height / cropHeight * 1.5f
newZoom = minOf(scaleW * zoom, scaleH * zoom, MAX_ZOOM)
}
- ์ฐ๋ฆฌ๋ผ๋ฆฌ์ ๊ธฐ์ ๊ณต์ && ์๋ก์ ๋ก์ง์ด๋ ์ฝ๋๋ฅผ ์๋ฒฝํ๊ฒ ์ดํดํ๋ ์๊ฐ์ ์ ํด๋ณด๊ธฐ
- ๊ธฐ๋ณธ์ ์ธ ์์ ์ ๊ฑฐ์๋ค ์งํ๋์ด 4์ฃผ์ฐจ ๋ถํฐ๋ ๋ค๋ฌ๋ ์์ ์ ์งํํ ์ ์์๊ฒ ๊ฐ๋ค
- ์์ ํ ๋ด์ฉ์๋ํด ์ ๋ฆฌํ ์๊ฐ์ด ์ ์๊ณ
- ์ผ๋ฐ์ ์ด์ง ์์ ๋ด์ฉ์ ๋ํด ์ฃผ์์ด ํ์ํด ๋ณด์๋ค
- ๊ทธ๋ฆฌ๊ณ ๋ก์ง์ ๋ํ ํ๋ก์ฐ์ ๋ํด ์ ๋ฆฌ๋ฅผ ํด๋ฌ์ผ ์ข๊ฒ ๋ค๋ ์๊ฐ์ ํ๊ฒ๋์๋ค
- ๋ฉ๋ชจ์ ์ ๋ฆฌ์ ์กฐ๊ธ๋ ์ ๊ฒฝ์ ์จ์ผ๊ฒ ๋ค
- ํผ์ ํ๋ ๊ฒ๋ณด๋ค ๊ฐ์ด ํ๋ ํ์๋ค์ด ์์ผ๋ ๋ ๋ชฐ๋ํด์ ํ ์ ์์๋ค
- UI ์์ ์ด ๋ค์ธ ์๊ฐ์ ๋นํด ์๊ฐ๋ณด๋ค ๋๋๊ณ ์ดํด๋์ง ์๋ ๋ถ๋ถ์ด ๋ง์์ ๋ต๋ตํ๋ค
- ๋น์ฆ๋์ค ๋ก์ง ์์ ์ ์์ํ๋ฉด ์ข ๋ซ์ง ์์๊น?!
- ํ์๋ค๊ณผ ๊ฑฐ์ 10์๋ถํฐ ์๋ฒฝ2์๊น์ง ๋ชจ์ฌ์ ๊ฐ์ด ์ฝ๋ฉ์ ํ๋ค๋ณด๋ ๋ฌธ์ ๊ฐ ์๊ฒผ์๋ ๋น ๋ฅด๊ฒ ํ์๋ ๊ฐ๋ฅํ๊ณ ๋๊ตฐ๊ฐ์ ๊ฐ์ด ์ฝ๋ฉ์ ํ๋ ๊ธฐ๋ถ์ด ๋ค์ด์ ์ข์์ต๋๋ค.
- ์ฒ์์ ๊ณํํ๋ ์๋ก์ ์ญํ ์ด ๋ฐ๋์ด๋ ๊ตฌํ์ด ๊ฐ๋ฅํด์ผ ํ๋ค.
- ๋๋ ๋ค๋ฅธ ์ฌ๋์ ํํธ๋ฅผ ๋ค์ด๊ฐ๋ ๋ฐ๋ก๋ ์๋๋๋ผ๋ ๊ตฌํ์ ํ ์ ์์๊น? ์๊ฐ์ด ๋ค๊ณ ๋๊ฒ ์ฌ์ํ ๊ฒ๋ค๋ ์ ๋ฆฌํ์ ๋ผ๊ณ ํ์ง๋ง ์ ์์ง์ผ์ง๋๊ฑฐ ๊ฐ์์ ์์ฌ์ ์ต๋๋ค.
- ์๋ก์ ์ญํ ์ด ๋ฐ๋์ด๋ ๊ตฌํ์ด ๊ฐ๋ฅํ ์ ์๊ฒ ํ๊ธฐ ์ํด์๋ ์ฝ๋์ ์ดํด๋ฅผ ํ์๋ก ํ๋๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ง์ผ๋ก ๋ถ์กฑํ๋ค๊ณ ๋๊ปด ๋งค์ฃผ ํน์ ์๊ฐ ๋์ ์๋ก์ ๊ตฌํ์ ์๋ฒฝํ๊ฒ ์ดํดํ ์ ์๋ ์ ๋๊ฐ ๋ ์ ์๊ฒ ์ด์ผ๊ธฐ๋ฅผ ํ๊ธฐ๋ก ํ์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ Tech ์ ๋๋ฌด ๋ถ๋ด์ ๊ฐ์ง ๋ง๊ณ ์์ ๋จ์๋ ์ฌ๋ฆฌ๊ณ ์ ํฉ๋๋ค.
- ๊ฒ๋์์ ํ๋ฃจ์ฃ์ผ ๋ถ์ด์ ํ๋๊น ์ธ๋กญ์ง ์๊ณ ๊ฐ์ ์ฑ๋ ๋ถ์ฌ๋์ด์ ์ข์๋ค
- ์ด์๊ฐ ์๊ธฐ๋ฉด ๋ฐ๋ก๋ฐ๋ก ์๋ ผํ ์ ์์ด์ ๊ฒ๋ํ์ด ๋ชจ๊ฐ์ฝ๊ฐ ์ข๋ค
- ๋ฅ์ง์ฒ์ฐธ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ผ๋ ๊ฐ์ ์ ์ ํ์ ํ๊ณ ๋ณด์ํ ์ ์์๋ค
- ์๊ตฌ์ฌํญ ์ค๊ณ์์ ๊ธฐํ์ด๋ task ๋ค ์ ํด๋๊ณ ์ ์ ๊ฐ๋ฐํ ๋ ์ฐธ๊ณ ํน์ ์ํ ๊ฐฑ์ ์ ํ์ง ์์๋ค
- ์์ ์ ํ ๋๋ง๋ค ์ด์ ํ๋์ฉ ์ฌ๋ฆฌ๊ณ ํ๊ณ ์ฌ๋ฆฌ๊ณ ํ๊ณ ํด์ ๊ณํ์ ์ฒ ์ ํ ์ง์ง ๋ชปํ๋ ๊ฒ ๊ฐ๋ค
- ๋ค์์ฃผ์๋ ์์์ผ ์คํ๋ฆฐํธ ํ์์์ ์์ ํ ์ด์๋ฅผ ๋ฏธ๋ฆฌ ๋ฑ๋กํ๊ณ ๊ณํ์ ๋ง๊ฒ ํด๋ด์ผ๊ฒ ์ต๋๋ค
- ์ค์ ๋ก ๊ฑธ๋ฆฐ ์๊ฐ๋ ์ฒดํฌํด์ ๋ค๋ฅธ ์์ ์ ์์ ์๊ฐ์ ์ ํ๋๋ฐ ์ฐธ๊ณ ํด์ผ๊ฒ ์ต๋๋ค
- ์นด์นด์ค ์์น ๊ฒฐ๊ณผ 9๊ฐ์ section์ผ๋ก ๋๋ ์ ์ ์ฅ
- ์นด์นด์ค ์์น ๊ฒฐ๊ณผ ํ ์คํธ ์ฝ๋ ์ถ๊ฐ
- ํ๋จ ๊ธฐํํฐ์ฝ ViewPager2๋ก ์ ํ์ ๊ทผ์ฒ์ ์๋ ๋ธ๋๋ ์ถ์ฒ
- ๋ค์ด๋ฒ ๋งต์ ๋ธ๋๋ ๋ง์ปค ํด๋ฆญํ์๋ ํด๋นํ๋ ์ฟ ํฐ๋ค ๋ณด์ฌ์ฃผ๊ธฐ
- ๊ธฐํํฐ์ฝ ์ถ๊ฐ ํ๋ฉด ๊ตฌํ
- ๊ฐค๋ฌ๋ฆฌ์์ ๊ฐ์ ธ์จ ์ด๋ฏธ์ง ์๋ ํ์ฑ
- CropImageView๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ํฌ๋กญ
- CropImageView์ Clip์ ์ด์ํ ๊ทธ๋ฆผ์ ์ฒ๋ฆฌ์ Zoom๊ธฐ๋ฅ ์ถ๊ฐ
- ์ง๋ฌธ ์ธ์ฆ Biometric Compat์ผ๋ก Migration
- PIN ์ํธํํ์ฌ DataStore์ ์ ์ฅ
- ์ค์ ๊ด๋ จ ์์
- ์ฑ ์ด๊ธฐ ์คํ ์ ์์น ๊ถํ ์์ฒญ
- DB์์ ๊ธฐํํฐ์ฝ ์์ด๋๋ก ๊ธฐํํฐ์ฝ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์จ๋ค.
- ๊ธฐํํฐ์ฝ ์ฌ์ฉ ์๋ฃ ๋ฒํผ ๋์ ๊ตฌํ
- ๊ธฐํํฐ์ฝ ๊ณต์ ๋ฒํผ ํด๋ฆญ์ ๊ธฐ๋ก ๋จ๊ธฐ๊ธฐ
- ๊ฐ์ ๋ฐฑ๋ก๊ทธ ์์ฑ
- Timber ๊ตฌํ ๊ณต์๋ฌธ์, ์ฐธ๊ณ ๋ธ๋ก๊ทธ
- UIState ๊ตฌํ ๋ด์ฉ ๊ณต์
- ์ฌ์ง ์ ํ ํ๋ฉด - RecyclerView์ Decoration ๊ด๋ จ ์์
- ์ฌ์ง ํธ์ง ํ๋ฉด
- ํฐ์น๋ฒ์ ์ ์, ์ด๋, ํฌ๊ธฐ ์กฐ์ ๋ฐฉ์ ์ค๋ช
- ์ด๋ฒคํธ ์ ์์ ํ์ฉ ๋ฐฉ์ ์ค๋ช (์ด๋, ํฌ๊ธฐ์กฐ์ , NONE)
- ํ๋ฉด ๊ทธ๋ฆฌ๊ธฐ (์๋์ฐ, ์ฃ์ง, ์ฝ๋)
- ์ค ์๋ฆฌ ์ค๋ช
ํ๋ ฌ ์ฐ์ฐ..
- ๋๋ถ์ด ๋ณํ
- ์ด๋ก ๋ณํํ ํ ๊ณ์ฐํ๊ณ ๋ค์ ๋ณํํ๋ฉด ๋์ง ์๋๊ฐ?
์
- ์น์ ๋ณ ์บ์ฑ๊ณผ ๊ฒ์
- ๋ช ๋ฒ๋์ DbResult ์ UIState๋ฅผ ํฉ์น ์ ์์ง ์์๊น
- SharedFlow test ํ ๋์ ์ด์ (Turbin)
- Room์์ ๊ธฐํํฐ์ฝ ๊ฐ์ ธ์ค๊ธฐ
- Intent๋ก ๊ธฐํํฐ์ฝ ํค ๊ฐ์ ๋ฃ์ด์ ์์ธํ๋ฉด์ ์ด๊ธฐ
- ๋ชฉ๋ก, ์ง๋, ์๋ฆผ์์ ํค๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ๊ทธ๊ฑฐ ๋์์ค๋ค.
- ์ ํจํ์ง ์์ ์ํ๋ ๊ด์ธกํ์ฌ Dialog ์ถ๋ ฅ
- PIN UI ๊ตฌ์ฑ
- UI ์์ ํฉ์๋ค
- ๋ค์ ๋ฒํผ์ ์์ ๊ณ 6์๋ฅผ ์ฐ๋ฉด ๋์ด๊ฐ๊ฒ ๋ฐ๊พธ์ฃ ?
- PIN์ String์ผ๋ก ๊ด๋ฆฌ
- ๊ฒ์์ ํ์ฌ ์น์ ๋ณด๋ค ๋ ๋๊ฒ ํ ๋ฒ์ ๊ฒ์ํ๋ค
- ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์น์ ์ ๋ณด์ ํจ๊ป DB ์ ์ ์ฅํด์ผ ํ๋๋ฐ ๊ฒ์ ๋ ๋๋ง๋ค ์ ์ฅํ๋ ๋ฐฉ์์์ ๊ฐ์ ๋ฐฉํฅ์ ํจ๊ป ๊ณ ๋ฏผํด ๋ด
- PIN ์ ์ฅ์ AES256 ์ผ๋ก ์ํธํ ํ ์ ์ฅ (๊ฐ๋จํ ํ ์คํธ ์งํ)
- ์ ๋ก์ง์ ๋ฐ์ดํฐ ๋ ์ด์ด๋ก ์ฎ๊ธธ ์์
- ์ค์ PIN ์ ๋ณด๋ฅผ ์ํธํ ํ ์ ์ฅํ๋ ๊ณผ์ ์ํํ ์์
- ๊ธฐํํฐ์ฝ ์ฌ์ฉ ์ฒ๋ฆฌ Room ๊ตฌ์ถ
- ๊ธฐํํฐ์ฝ์ Flow ๋ก ๋ฐ๋ ์ด์ : ์์ธ ํ์ด์ง์์ ๊ธฐํํฐ์ฝ์ ์ํ๋ฅผ ๋ณํ์ํค๊ณ , ๋ฐ๋ก ๋ฐ์ํ ์ ์๋๋ก Flow ๋ก ๋ฐํ ๋ฐ์
- CropRect ๊ฐ ์์ง์ผ ์ ์๋ ์ต๋ ๋ฒ์ ์ง์ (์ฌ์ง์ ์ ๋์ด๊ฐ๋๋ก)
- CropRect ์ ์ต์ ํฌ๊ธฐ ์ง์ (์ต์์ผ ๋๋ ์ด๋ ๊ฐ๋ฅํด์ง)
- ์ด์ ํฌ์ธํธ์ ํ์ฌ ํฌ์ธํธ๋ฅผ ๋น๊ตํด์ CropRect ์ด๋
- ๋์ผ๋ก ๊ฐ์ ๋ ํ๋๋ ์ฌ์ง์ ์ด๋์์ผ์ค์ผ ํ๋๋ฐ 2๋ฐฐ ๋น ๋ฅด๊ฒ ์ด๋
- 3dp ์ดํ๋ก ์ฌ์ง ๋ชจ์๋ฆฌ์ ๋ถ์ผ๋ฉด ๋ฑ ๋ถ๋ snap ๊ตฌํ
- ProtoDataStore ์ ์ฉ์ด kts ์ฌ์ ์คํจ -> PreferenceDataStore ๋ก ๋ณ๊ฒฝ
- iv ๋ฅผ PreferenceDataStore ์ ์ ์ฅํ๋ฉด์ Exception ๋ฐ์ -> ํด๊ฒฐ
- Snackbar Animation ์ ์ฉ
- ๊ธฐ์กด์ Mode ์ ๋ฐ๋ผ ํ๋ฉด์ ๋ค๋ฅด๊ฒ ๋ณด์ฌ์ฃผ๋ ๋ถ๋ถ์ Fragment๋ฅผ ์ด์ฉํ ํ์ด์ง ๊ต์ฒด๋ก ๋ณ๊ฒฝ
- ์ฌ์ฉ ๊ธฐ๋ก์ reverse ๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฌ ์์ ๋ณ๊ฒฝ
- ๊ฒ์, Draw ๋ฅผ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์งํํ๋ ๊ฒ๋ณด๋ค ํ๋ฒ์ ๋ค์ด ๋ฐ์ ๊ทธ๋ฆฌ๋๊ฒ ๋ ํจ์จ์
- Dark Mode ๋ณ๊ฒฝ์ ๋ฐ๋ผ Marker ๋ฅผ ๋ค์ ๊ทธ๋ ค์ฃผ์ง ์๋ ๋ฌธ์ ํด๊ฒฐ
- ActivePointerId ๋ฅผ ์ด์ฉ ํ์ฌ MultiTouch ๋ฅผ ํด๊ฒฐ
- ๋ด๋ถ ์ ์ฅ์๋ฅผ ์ด์ฉํ์ฌ Crop๋ ์ด๋ฏธ์ง ์ ์ฅ ๋ฐ Uri๋ฅผ setResult๋ก ์ ๋ฌ
- ๋ฐ์ฝ๋์ ๋ํด ์์๋ณด์!
- ์คํฌ๋กค์ด ์ ์ด์ํ๊ฒ ๋์ํ ๊น
- Room ์์ Flow ๋ก ๋ฐํ๋ฐ์์ StateFlow ๋ก ์ฌ์ฉํ๊ธฐ
- Jetpack Compose์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฒ
- ์๋๋ก์ด๋์์ ์ง๋ฌธ ์ธ์ฆ ํ๊ธฐ!
- Firebase Google ๋ก๊ทธ์ธ ์ธํ ์ค ๊ฒช์ ์ค๋ฅ
- ์ํ์ ์ viewModelScope.launch ์ด์ธ์ฌ๊ฑด ์์ฌ์ผ์ง
- ์ฟ! KeyStore๊ณผ Cipher
- WorkManager ์๋ฆผ๊ณผ ์์ ฏ์ ์ฌ์ฉํด๋ณด์!
- ์ ๋๋ฉ์ด์ ์ผ๋ก ์ก์ ์จ๊ฒฐ ๋ถ์ด๋ฃ๊ธฐ
- ๋ฒกํฐ ์ด๋ฏธ์ง๋ฅผ ํธ์งํด๋ณด์!
- ItemDecorator ๋ฅผ ์ด์ฉํ ์์ดํ Offset ์ค์ !
- String Resource ViewModel ์์ ์์ํ๊ฒ ์จ๋ณด์
- ๋ฆฌ๋ทฐ์ด ๋ฑ๋ก์ ์๋์ผ๋ก ํด๋ณด์
- Mockk์ ํ์ฉํ ํ ์คํธ
- ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ Room์ ์บ์ฑํด๋ณด์!
- Room One to Many
- CustomException ๊ณผ Result๋ฅผ ์ ๊ทน ํ์ฉํด๋ณด์!
- View์ Event๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ํ ํด๋์ค๋ฅผ ๋ง๋ค์ด๋ณด์!
- WorkManager ์๋ฆผ๊ณผ ์์ ฏ์ ์ฌ์ฉํด๋ณด์!