-
Notifications
You must be signed in to change notification settings - Fork 4
๐ค Why
ํ๋ก์ ํธ๋ ์คํฌ๋ผ์ ์งํํ๋ฉด์ ์ ํฌ๊ฐ ์ ์ด๋ฌํ ์ ํ์ ํ๋์ง ๊ธฐ๋ก์ ํ๋ ๊ณต๊ฐ์ ๋๋ค.
๊ณต์๋ฌธ์ - Groovy -> KTS
์ฐ์ํ ํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ - Gradle Kotlin DSL ์ด์ผ๊ธฐ
- Kotlin์ผ๋ก ๋ณ๊ฒฝ์ ํ๋ค๋ฉด IDE์์ ์ ๊ณตํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋ ์ ์ฌ์ฉํ ์ ์๋ค.
- ์ฝ๋ ์๋์์ฑ
- ์ค๋ฅ์ฝ๋ ๊ฐ์กฐ
- ์บก์ํ
- ์์กด์ฑ ๋ถ๋ฆฌ
- ํ ํ์
- ๊ฐ ๋ชจ๋์ด ๊ฐ๋ ์ฑ ์์ ๋ช ํํ๊ฒ ๊ฐ๋ฅํ๋ค.
- ๋ค๋ฅธ ์ฌ๋์ด ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ฅผ ๋ดค์๋ gradle๋ง ๋ณด๊ณ ์ ํด๋น ๋ชจ๋์ด ์ด๋ค ๋ชจ๋์ธ์ง ์ ์ ์๋ค.
- ํน์ ํด๋ฆฐ ์ํคํ ์ฒ๋ฅผ ์๊ณ ์๋ ์ฌ๋์ด๋ผ๋ฉด ํ์ฌ ๋ถ๋ฆฌ๋ ๋ ์ด์ด๋ง ๋ณด๊ณ ๋ ์์์ด ๊ฐ๋ฅํ๋ค.
- ์์ธ ํ๋ฉด๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๋ถ๋ถ์์ ์ฌ์ฉ๋๊ณ , ํด๋ฐ๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ ์กํฐ๋นํฐ ํ์
-> ๋ฉํฐ ์กํฐ๋นํฐ ์ฌ์ฉ
- Koin์ ๋ฐํ์์ ์์กด์ฑ์ ์ฃผ์
ํ๋ค.
- ๋ฐํ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ์ ๋ด๊ฐ ์ฃผ์ ์ ํ์ง ์์๋ ์ฑ์ ๋น๋๊ฐ ๋๋ค.
- Hilt๋ ์ปดํ์ผ ํ์์ ์ฃผ์
์ ๋ํ ๊ฒ์ฆ์ ๋ง์น๋ค.
- Android X ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๊ณต (ViewModel, WorkManager ๋ฑ)
- ๋ช ํํ Scope, ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ์ฝ๋ ๊ฐ์(Dagger2 ์์ ์ง์ Component๋ฅผ ๋ง๋ค๊ณ ์ค์ ํ๋ ๊ณผ์ ์ด ๊ฐ์ํ๋จ)
- ์ปดํ์ผ ํ์์ ์ฃผ์ ์ ํ๋ฏ๋ก ์ฑ ์์์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์ฆ์ ์ ์ ์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก๋ Koin ๋ณด๋ค Hilt๋ฅผ ์ ํํ ์ด์ ๋ ์ ์ ๋ ๋ ๋น ๋ฅด๊ฒ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋ ๊ฒ๊ณผ ๊ฐ๋ฐ์๋ ๋ ์์ ์ ์ผ๋ก ์๋น์ค๋ฅผ ์ ๊ณต์ด ๊ฐ๋ฅํด์ก๋ค๋ ๋ถ๋ถ์ ๋๋ค.
data vs app
- ์ฐ๋ฆฌ ์กฐ์์ ํซํ ์ฃผ์ ์๋ค.
- data๋ ์ด์ด์ ์กด์ฌํด์ผ ํ ์ง app๋ ์ด์ด์ ์กด์ฌํด์ผ ํ ์ง
์ data์ ์กด์ฌํด์ผ ํ๋์ง๋ ์๋์ ๊ฐ๋ค.
- ์ฐ๋ฆฌ๊ฐ ์์กด์ฑ์ ์ฃผ์ ํ๋ ๊ฒ๋ค์ด ๋๋ถ๋ถ์ด data, domain ๊ฐ์ฒด์ด๋ค.
- data๋ domain์ ์๊ณ ์์ผ๋ฏ๋ก data ๋ ์ด์ด์ ๋๋ ๊ฒ์ด ์ณ๋ค.
app์ ์กด์ฌํด์ผ ํ๋ ์ด์ ๋ ์๋์ ๊ฐ๋ค.
- app์ด ๋ชจ๋ ๋ ์ด์ด๋ฅผ ์๊ณ ์๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ์ด๋ค ์์กด์ฑ์ด๋ app์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ฐ๋ฆฌ๊ฐ ํ์ฌ ๊ตฌํํ๊ฒ ๋ provide๋ ๋๋ถ๋ถ์ด SingleTon(Application)์ธ๋ฐ ๊ทธ๋ฌ๋ฉด Application๊ณผ ๊ฐ์ด ์๋๊ฒ ๋ง์ง ์๋
๊ฒฐ๊ณผ์ ์ผ๋ก app ๋ ์ด์ด์ ์์ด์ผ ํ๋ ์ด์ ๊ฐ ์ข ๋ ํ๋นํ๋ค๊ณ ํ๋ด์์ ๊ฒฐ๋ก ์ด ๋ฌ์ต๋๋ค.
21 vs 23
21๋ฅผ ์ ํ ํด์ผ ํ๋ ์ด์
- 98.8% ์ ์ ์ ๋ฅผ ์ง์ํ ์ ์๋ค.
- ๋ ๋ง์ ๋ฒ์ ์ ๋ฐ๋ฅธ ๋์์ ํ์ต ํ ์ ์๋ค.
23๋ฅผ ์ ํ ํด์ผ ํ๋ ์ด์
- 96.2% ๋ก 2.6% ์ ๋์ ์ฐจ์ด๋ ๋ฌด์ํ ์ ์๋ค.
- ํ์ต์ด ์๋ ์ค์ ๋ก ์ถ์ํ ์ฑ์ด๋ค
- ์ง๋ฌธ ์ธ์API๊ฐ SDK 23 ์ดํ ๋ถํฐ ์ง์ํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ถ์๊ฐ ๋ชฉํ์ด๊ธฐ ๋๋ฌธ์ 23๋ฒ์ ์ด์์ผ๋ก ๊ฒฐ์ ์ ํ์์ต๋๋ค.
Realtime Database
-
๋ฐ์ดํฐ๋ฅผ JSON ํธ๋ฆฌ๋ก ์ ์ฅ
- ๋ณต์กํ ๊ณ์ธต์ ์ธ ๋ฐ์ดํฐ๋ ๋๊ท๋ชจ๋ก ๊ตฌ์ฑํ๊ธฐ ์ด๋ ค์
-
์ ํ๋ ์ ๋ ฌ ๋ฐ ํํฐ๋ง์ด ์๋ ์ฌ์ธต ์ฟผ๋ฆฌ
- ์ ๋ ฌ์ด๋ ํํฐ๋ง์ด ๊ฐ๋ฅํ์ง๋ง ๋ ๋ค๋ ์๋๋ค
- ์ฟผ๋ฆฌ๋ ํญ์ ํ์ ํธ๋ฆฌ๋ฅผ ๋ฐํ ํ๋ค
- ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ๋ฐ์ดํฐ๊ฐ ์ฆ๊ฐํ๋ฉด ์ ํ ๋๋ค
-
ํ์ฅ์ ์ค๋ฉ์ด ํ์ํฉ๋๋ค
- ๋จ์ผ DB ๋น 200,000 ๊ฐ์ ๋์ ์ฐ๊ฒฐ ๋ฐ 1,000 write/s ์ด๋ฉฐ ๊ทธ ์ด์์ผ๋ก ํ์ฅ ์ DB๋ฅผ ๋ถํ ํด์ผํ๋ค
-
๊ฐ๊ฒฉ
- ์ ์ฅ๋ ํฌ๊ธฐ 15GB ๊ธฐ์ค $70
Cloud Firestore
-
Document๋ชจ์์ผ๋ก ์ ์ฅ
- ๋ณต์กํ ๊ณ์ธต์ ์ธ ๋ฐ์ดํฐ๋ Document๋ด์ ํ์ Collection์ ์ด์ฉํ์ฌ ๊ตฌ์ฑํ๊ธฐ ์ฌ์
-
๋ณตํฉ ์ ๋ ฌ ๋ฐ ํํฐ๋ง์ด ์๋ ์ธ๋ฑ์ฑ๋ ์ฟผ๋ฆฌ
- ๋จ์ผ ์ฟผ๋ฆฌ์์ ํํฐ๋ฅผ ์ฐ๊ฒฐํ๊ณ ์์ฑ์ ๋ํ ํํฐ๋ง ๋ฐ ์ ๋ ฌ์ ๊ฒฐํฉํ ์ ์๋ค.
- Collection์ Document๋ง ๋ฐํํ๊ณ ํ์ Collection์ ๋ฐํํ์ง ์์ต๋๋ค.
- ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก Indexing ๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์๋ ๊ฒฐ๊ณผ ํฌ๊ธฐ์ ๋น๋กํ๋ค.
-
์ค์ผ์ผ๋ง์ ์๋
- 1,000,000๊ฐ์ ๋์ ์ฐ๊ฒฐ ๋ฐ 10,000 write/s ์ด๋ฉฐ Firebase ์์ ํ๋๋ฅผ ๋๋ฆด ๊ณํ
-
๊ฐ๊ฒฉ
- ์ ์ฅ๋ ํฌ๊ธฐ 15GiB ๊ธฐ์ค $2.52
์ถ์ ํ DB ์ ๊ฐ๊ฒฉ์ ์ธ ์ธก๋ฉด, ์ฟผ๋ฆฌ์ ์ฑ๋ฅ ๋ฑ์ ์ด์ ๋ก Cloud Firestore๋ฅผ ์ ํ ํ์ต๋๋ค.
ํ๋ก์ ํธ์ ๋์ ์ ํด์ผํ ๊น?
๋์ ํ๋ ค๋ ์ด์
- ์๋ก์ด ๊ธฐ์ ๋์ ์ ๋ํ ์๋
- ๊ฐ์ด๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ๋ฐํ์ฌ ์๊ฐ ๋จ์ถ
๋์ ํ์ง ์์๋ ๋๋ ์ด์
- Material3 ๋ฐฉ์์ผ๋ก ๋์์ธ์ ์์ ํ๊ธฐ์ ์๊ฐ์ด ๋ ๊ฑธ๋ฆฐ๋ค.
- ์์ ํ ๊ฒฐ๊ณผ๋ฌผ์ด Material3์ ์ด์ธ๋ฆฌ์ง ์๋ค ํ๋จ
Material3๋ฅผ ๋์ ํ์ง ์๊ธฐ๋ก ๊ฒฐ์
๋ค์ด๋ฒ vs ์นด์นด์ค, ์ด๋ค Open Api๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น?
api๊ฐ ํ์ํ ์๊ตฌ์ฌํญ
- ์ฌ์ฉ์ ์์น ๋ฐ๊ฒฝ 500m ์ค ์์ง ๊ธฐํํฐ์ฝ ์ฌ์ฉ์ฒ๋ฅผ ์ง๋์ ํ์
- ์ฌ์ฉ์ ํ์ฌ ์ขํ ๊ธฐ์ค ๋ฐ๊ฒฝ 500m ๋ด ํค์๋ ๊ฒ์
- ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ง๋์ ์ ๋ณด ํ์
๊ฒ์
์ฌ์ฉ์ ํ์ฌ ์ขํ ๊ธฐ์ค ๋ฐ๊ฒฝ 500m ๋ด ํค์๋ ๊ฒ์์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๊ฒ์ api๋ ์นด์นด์ค ๋ก์ปฌ Api๋ก ๋น ๋ฅด๊ฒ ๊ฒฐ์ ๋์๋ค.
์ง๋
์ฅ์ ๊ฒ์ api๋ฅผ ์นด์นด์ค๋ก ํ์ ๋ ๋ค ์ฅ๋จ์ ์ ๋น๊ตํด๋ณด์๋ค.
๐ ๋ค์ด๋ฒ ์ง๋
์ฅ์
- ์์๋ค.
- ์๋์ฐ ํ๊ฒฝ์ ์๋ฎฌ๋ ์ดํฐ์์๋ ๊ตฌ๋ํ ์ ์๋ค.
- ๋ฌด๋ฃ๋ก ์ 1์ต๊ฑด ์ฌ์ฉ ๊ฐ๋ฅ (์ผ 333๋งํ ์ฌ์ฉ ๊ฐ๋ฅ)
๋จ์
- ์นด์นด์ค, ๋ค์ด๋ฒ ๊ฐ๋ฐ์ ์ผํฐ์ ๋ ๋ค ์ฑ ๋ฑ๋ก์ ํด์ผํ๋ค.
๐ ์นด์นด์ค ์ง๋
์ฅ์
- ์นด์นด์ค ๋ก์ปฌ api๋ฅผ ์ฌ์ฉํ๋ ๊น์ ๊ฐ์ด ๋ฑ๋กํด์ ์ฌ์ฉํ ์ ์๋ค.
๋จ์
- ๋งฅ์ด ์๋ ํ๊ฒฝ์์๋ ์๋ฎฌ๋ ์ดํฐ ๊ตฌ๋ ๋ถ๊ฐ (ํ ์คํธ ๊ธฐ๊ธฐ๋ก ๊ฐ๋ฐํด์ผํจ)
- ๋ฌด๋ฃ๋ก 1์ผ 300,000ํ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ ์๋ป์.
๊ฒ์ api๋ REST API์ด๊ธฐ ๋๋ฌธ์ ์ฑ ์์ฒด์ ํฐ ์ํฅ์ ์ฃผ์ง๋ ์์ ๊ฒ ๊ฐ์ ์์๋ฉด์๋ ์ฌ์ฉํ์๊ฐ ๋ง๊ณ , ์๋ฎฌ์์๋ ๋์๊ฐ๋ ๋ค์ด๋ฒ์ง๋๋ฅผ ์ ํํ๋ค.
Firebase ์ ๊ธฐ๊ธฐ์ ํ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ณ ์๊ณ , Firebase ์ ์์ฒญ ์(๋น์ฉ)๋ฅผ ์ค์ด๊ธฐ ์ํด ํ์ผ์ ์กด์ฌํ๋ค๋ฉด ํ์ผ์์ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ์ ํํ๋ ค๊ณ ํ๋ค
- Firebase ์ Storage ์ ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋์ด ์๊ณ , Cloud Firestore(์ดํ FirebaseDB) ์ ์ฌ์ฉ์ ๋ฐ ๊ธฐํํฐ์ฝ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ์๋ค
- Room ์๋ FirebaseDB Document ์
id
๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ํ์ผ์ ์์น ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค
์ด๋ฏธ์ง ์ ์ฅ ๋ฐ ์์ฒญ ๋ก์ง
- ํ์ผ์ด ์กด์ฌํ๋ค๋ฉด ํ์ผ์์ ๊ฐ์ ธ์จ๋ค
- ํ์ผ์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด ํ์ด์ด๋ฒ ์ด์ค์ ์์ฒญํ ํ ๋ฃธ์ ์ ๋ณด๋ฅผ ๊ฐฑ์ ํ ํ ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ถ๋ฌ์์ผ ํ๋ค
Data ๋ ์ด์ด์์ ๊ฐ์ ธ์์ผ ํ๋๋ฐ ํ์ผ์ ์ ๋ฌด๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ context
๊ฐ ํ์ํ๋ค. ๊ทธ๋ผ ์ด๋ค ๋ ์ด์ด์์ ์ฒ๋ฆฌํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด์๋ค.
- Network ๋ ์ด์ด๋ฅผ ๋ง๋ค๊ณ , Presentation๊ณผ Data ๋ ์ด์ด์์ Network ๋ ์ด์ด๋ฅผ ์๊ฒ ํ๋ค
- ํ์ผ์ ์ ๋ฌด๋ Presentation ์์ ํ๊ณ , ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์๋ง Data ๋ ์ด์ด์ ์์ฒญํ๋ค
- ์ถ์ ํด๋์ค
- ์ธํฐํ์ด์ค
- sealed class
- Boolean ์ผ๋ก ๊ตฌ๋ถ
๋ชจ๋ ์์ฑ์ด ๋์ผํ๊ณ ๊ธ์ก๊ถ ์ฌ๋ถ๋ง ์ฐจ์ด๊ฐ ๋๊ธฐ ๋๋ฌธ์ Boolean ์์ฑ์ผ๋ก ๊ตฌ๋ถํ๋ ๊ฒ์ผ๋ก ๊ฒฐ์
ํ์ฌ๋ก์๋ ํ์ด์ด๋ฒ ์ด์ค์ Room
์ด ๋์ผํ๊ณ ๊ณ ์ ํ ์์ด๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ด์ด๋ฒ ์ด์ค์ Document ID ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค. ๊ทธ๋์ ํ๋ก์ฐ๊ฐ ํ์ด์ด๋ฒ ์ด์ค๋ฅผ ํญ์ ๊ฑฐ์ณ์ผ ํ๊ณ , ์ด๋ Network ์ฐ๊ฒฐ์ ๋ฌธ์ ๊ฐ ์๊ฒผ๊ฑฐ๋ ํ์ด์ด๋ฒ ์ด์ค ์ ๊ทผ์ ๋ฌธ์ ๊ฐ ์๊ธด ๊ฒฝ์ฐ Room
์์ ๋ฐ์ดํฐ๋ฅผ ์ผ๋จ ๊ฐ์ ธ์จ ํ ๋๊ธฐํ ํ๋ ์์
์ด ํ์ํ๋ค
ํ์ง๋ง ๊ณ ์ ํ ์์ด๋๋ง ๊ฐ์ง ์ ์๋ค๋ฉด ํด๊ฒฐ๋ ๋ฌธ์ ์๊ณ , ๋ก๊ทธ์ธ ํ ์ ์ ๊ฐ ๊ณ ์ ํ ์์ด๋ ๊ฐ์ ๊ฐ์ง๋ค๊ณ ๊ฐ์ ํ์ ๋ ํด๋น ์์ด๋์ ๊ธฐํํฐ์ฝ ์์ด๋๋ฅผ ๊ฒฐํฉํ๋ฉด ๊ณ ์ ํ ์์ด๋๋ฅผ ์ฌ์ฉํ ์ ์์ ๊ฒ์ด๋ผ ํ๋จํ๋ค
์์ ๋ฌธ์ ๋ก ์ธํด์ ์ ์ ์ ๊ณ ์ ํ ์์ด๋๋ฅผ ์ป์ด์ผ ํ๋ค.
๊ธฐ์กด์ SNS ๋ก๊ทธ์ธ์ Kakao
, Naver
, Google
์ ์ง์ํ๋๋ก ๊ณํํ์ง๋ง ํ์ด์ด๋ฒ ์ด์ค๋ Kakao
, Naver
๋ก๊ทธ์ธ์ ์ง์ํ์ง ์๋๋ค.
์ด๋ ๊ฒ ๋์ ๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์๋ค.
- ๊ฐ๊ฐ ๋ก๊ทธ์ธ API ์์ ๊ณ ์ ํ ์๋ณ ์ ๋ณด๋ฅผ ๋ด๋ ค์ฃผ๋ ์ง ํ์ธํ๊ณ ๊ฐ๊ฐ์ ์ฝ์์์ ๊ด๋ฆฌํด์ผ ํ๋ค
- ํ์ด์ด๋ฒ ์ด์ค์ ์ธ์ฆ ์์คํ
์ผ๋ก
Kakao
์Naver
์ ๊ณ ์ ์๋ณ ๋ฒํธ(ํน์ ์ด๋ฉ์ผ)๋ฅผ ๋๊ฒจ์ ํ์ด์ด๋ฒ ์ด์ค ์ฝ์์์ ํ ๋ฒ์ ๊ด๋ฆฌํ๋ค - ์ผ๋จ์
Google
๋ก๊ทธ์ธ๋ง ์ง์ํ๋ค
ํ์ฌ๋ Google ๋ก๊ทธ์ธ ๋ง ์ง์ํ๋๋ผ๋ ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ฅผ ์ปค๋ฒํ ์ ์๋ค๋ ์ ๊ณผ ๋ก๊ทธ์ธ ์๋จ์ด ๋ฌ๋ผ์ง๋ค๊ณ ํด์ ์๋น์ค์ ๋ด์ฉ์ด ๋ฌ๋ผ์ง๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ์ถํ์ ์ถ๊ฐ๋ก ์ง์ํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฒฐ์ ํ๊ฒ ๋์๋ค
- ์ฌ์ฉ์๋ง๋ค ๊ณ ์ ์ ID ๊ฐ ์๊ณ , ๊ธฐํํฐ์ฝ ๋ง๋ค ๊ณ ์ ์ ID ๊ฐ ์๋ค
- ์ฌ์ฉ์์ ID ๋ ๋ก๊ทธ์ธ API์์ ์ ์ผ์ฑ์ ์ง์ํด์ค๋ค๊ณ ํด๋ ๊ธฐํํฐ์ฝ์ ID ๋ ๊ฒน์น ์ํ์ด ์๋ค
๋ค์์ ์๊ฒฌ๋ค์ด ๋์๋ค
- ์ฌ์ฉ์์ ID ์ ๊ธฐํํฐ์ฝ์ ID ๋ฅผ ๊ฒฐํฉํด์ ์ ์ผํ ID ๋ฅผ ๋ง๋ค์
- ๊ธฐํํฐ์ฝ์ UUID ๋ฅผ ์ฌ์ฉํ์
1๋ฒ ์๊ฒฌ์ ์ฌ์ฉ์์ ID ๋ฅผ ๋ฐ๋ก ๋ฌ์ผ ํน์ ์ฌ์ฉ์์ ์ ์ฒด ๊ธฐํํฐ์ฝ ๋ชฉ๋ก์ ๊ฐ์ ธ์ฌ ์ ์๊ธฐ ๋๋ฌธ์ ์ ๋ณด๊ฐ ์ค๋ณต๋ ์ ์๋ค
๋ฐ๋ฉด 2๋ฒ ์๊ฒฌ์ UUID ๋ง ๊ฒน์น์ง ์๋๋ค๋ฉด ๊ธฐํํฐ์ฝ์ ID ๋ง์ผ๋ก๋ ๊ตฌ๋ถํ ์ ์๊ณ , ์ ๋ณด๋ ์ค๋ณต๋์ง ์๊ธฐ ๋๋ฌธ์ 2๋ฒ ์๊ฒฌ์ ๋ฐ๋ฅด๊ธฐ๋ก ํ๋ค
- UUID ๋ 36 ์๋ฆฌ์ ์ซ์ + ์ํ๋ฒณ ์ผ๋ก ๊ตฌ์ฑ๋๋ค
- UUID ๋ ์ด 340,282,366,920,938,463,463,374,607,431,768,211,456 ๊ฐ์ ๊ฒฝ์ฐ์ ์๊ฐ ์กด์ฌํ๋ค
- ์์ญ ์กฐ ๊ฐ์ UUID(v4)๋ฅผ ์์ฑํ ๋ ๋จ ํ๋์ ์ค๋ณต๋ ํ๋ฅ ์ ์ธ๊ฐ์ด ๋งค๋ ํ๋์์ ์ด์์ ๋ง์ ํ๋ฅ ๊ณผ ๊ฐ๋ค
- ๊ทธ ํ๋ฅ ์ 0.00000000006% ์ด๋ค
- ์ถ์ฒ: UUID ๊ฐ ๊ฒน์น ํ๋ฅ
์ ์ง๋๋ฅผ ์บ์ฑํ๊ฒ ๋์๊น
์ค๋ต๋ฐ, ํ ์คํธ, ๋ค์ด์ผ๋ก๊ทธ, ํ๋๊ทธ๋จผํธ ๋ฑ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฌํ์ฉํ๋ฉฐ ์ฌ์ฉํ๊ณ ์์๋ค. ๋ฌธ์ ๋ ๋ทฐ๋ชจ๋ธ์ ๊ฐ์ง๋ ๋ฐํ ์ํธ ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ฐ์ํ๋ค.
๋ฐํ
์ํธ ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ๋ณ์์ ๋ด์์ ๊ฐ์ง๊ณ ์์๊ณ , ํ์ํ ๋ ํด๋น ๊ฐ์ฒด๋ฅผ show ํ๋ฉด์ ์ฌ์ฌ์ฉํ๊ณ ์์๋๋ฐ, ์ด ๋ค์ด์ผ๋ก๊ทธ ๋ด์์ ์ฌ์ฉํ๋ ViewModel ์์ viewModelScope.launch
๋ธ๋ก์ ํ์ง ์์์ ์ํ๋ ๋์์ด ์คํ๋์ง ์๋ ๋ฌธ์ ์๋ค.
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค
- ๋ทฐ๋ชจ๋ธ์
by viewModels()
๋ฅผ ํตํด์ ์์ฑํ๊ณ ์๋ค. ์ด๋ (์ฐ๋ฆฌ์ ๊ฒฝ์ฐ) ํ๋๊ทธ๋จผํธ์ ๊ฐ์ฒด String ์ ํค๋ก ์ฌ์ฉํ์ฌ ๋ทฐ๋ชจ๋ธ์ ์์ฑํ๊ณ ViewModelStore ์ ์ ์ฅํ๊ณ ์๋๋ค - ํ๋๊ทธ๋จผํธ๋
BottomSheetDialogFragment
๋ฅผ ๊ตฌํํ์ฌ ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ์์ฑํ๋ค
๋ฐํ
์ํธ ๋ค์ด์ผ๋ก๊ทธ๋ฅผ show()
ํ๊ฒ ๋๋ฉด ์๋ฌด๋ฆฌ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๋ค ํ๋๋ผ๋ ์ ์์ ์ผ๋ก ํ๋๊ทธ๋จผํธ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ํ๊ฒ๋๋ค. ์ฆ, ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ๋ซ์ผ๋ฉด์ onDestroy
๊ฐ ๋๊ณ , ์ด ๊ณผ์ ์์ ViewModel ๋ onCleared
๊ฐ ํธ์ถ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ๋ค์ show()
ํ๋ฉด ๋๊ฐ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ํ๋ค. ํ์ง๋ง ์ด๋ ViewModel ์ init
์ด ๋์ง ์๋๋ค.
-
UI Thread์ ์์ ํ์ง ์์
-
commit()
๋์์์ ๋ณ๋์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํธ์ถ๋ Thread์์ ํ์ผ์ ์ด๋ค. - ๊ทธ์ ๋์ UI Thread์์ ํธ์ถํ ์ ์๋ค ๐จ ๊ถ์ฅ๋์ง๋ ์์ง๋ง ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค๋ฉด UI Thread๊ฐ Blockํ๋ฉด์ ๋ฒ๋ฒ ์ด๊ฑฐ๋ ANR ๋ฐ์์ ์ํ์ฑ์ด ์กด์ฌํ๋ค.
-
-
Runtime Exception ์ ์ทจ์ฝ
- Exception์ ๋ํ ์๋ฌ ํธ๋ค๋ง์ ์ ๊ณตํ๊ณ ์์ง ์์.
- ๋ฐํ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด.. ์ฑ์ด ๊ฐ์ ์ข ๋ฃ๋๋ค.
-
๋น๋๊ธฐ API ์ง์
- Kotlin Coroutine, Flow๋ฅผ ์ง์ํ์ฌ ๋น๋๊ธฐ์ ์ด๊ณ ์ผ๊ด๋ ํธ๋์ญ์ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ์ ์ฅ
- IO Dispatcher๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ค.
-
Strong Consistency ๋ณด์ฅ
- ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ์ถ์ถ๋ ์ ์๋๋ก ํ๋ Transaction API ์ ๊ณต
- Proto DataStore์ ์ฌ์ฉํ๋ค๋ฉด type safey ์ง์
๐ก SharedPreferences์ ๋ฌธ์ ์ ๋ณด์๋์๊ณ Flow๋ฅผ ์ง์ํ๋ค๋ ์ ์์ Flow๋ฅผ ์ ๊ทน ์ฌ์ฉํ๋ ์ก์๊ฒ DataStore์ ์ฌ์ฉํ์ง ์์ ์ด์ ๊ฐ ์๋ค!
- ๋ฐ์ฝ๋์ ๋ํด ์์๋ณด์!
- ์คํฌ๋กค์ด ์ ์ด์ํ๊ฒ ๋์ํ ๊น
- 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 ์๋ฆผ๊ณผ ์์ ฏ์ ์ฌ์ฉํด๋ณด์!