| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- Kotlin
- android
- android Koin
- BaseObservable
- databinding
- ์๋๋ก์ด๋ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ
- ์ฝ๋ฃจํด
- previewparameterprovider
- ์์กด์ฑ ์ฃผ์
- ์ฃผ์ฐจ๋ณ ๊ณต๋ถ ๋ด์ฉ
- ๋ฐ์ธ๋ฉ
- structured concurrency
- Coroutine
- 1์ฝ
- ๊ตฌ์กฐ์ ๋์์ฑ
- ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ
- ์์กด์ฑ
- textstyle
- koin
- data
- ์๋๋ก์ด๋
- ์ญํด
- Compose
- ์ญํ์ ๋๊ฐ์ฐจ๊ธฐ
- binding
- ๊ฐ๋ฐ์ฐจ๊ธฐ
- DI
- ์ฝ์ธ
- 2์ฝ
- ๊ฐ๋ฐ์
- Today
- Total
๋ชฉ๋กDevelopment/Android (11)
๐ป ๊ฐ๋ฐ์ฐจ๊ธฐ ๐ฅ feat.Android
์ด์ Coroutine ๊ธ์ ์ด์ด ์ถ๊ฐ์ ์ผ๋ก ๊ธ์ ์ฐ๋ คํ๋ค. ์๋๋ก์ด๋์์ ์ฝ๋ฃจํด / Coroutine ์จ๋ด ์๋ค - 0 ์ฝ๋ฃจํด์ด๋! ๋ป : ์ฝ๋ฃจํด(Coroutine)์ Co- Routine์ ํฉ์ฑ์ด์ธ๋ฐ Co(์ ๋ชฐ๋ผ์ ์๋ฌธ์ฌ์ ๋งํฌ๋ฅผ ๋ค๊ณ ์๋ค) - ํ๋, ํ๋ ฅ, ํจ๊ป co- 1. together; with: 2. abbreviation for company (= business): 3. written… dictionary.cambridg taekwon-seungwon.tistory.com ์ด๋ฒ์ ๋ฐฐ์ธ ์ - build.gradle ์ถ๊ฐ - CoroutineScope - Coroutine Dispatcher - Coroutine ์ํ๊ด๋ฆฌ - WithContext ๋์คํจ์ณ ๋ถ๋ฆฌ - Coroutine ๋น๋ ..
์ด ๊ธ์์ ๋ฐฐ์ธ์ - ๋ค๋ฅธ DI์์ ์ฐจ์ด์ - Hilt์ ๊ดํ ์ ๋ฐ์ ์ธ ์ง์ - Hilt๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ - Hilt์์ ์์ฃผ ์ฌ์ฉํ๋ Annotation DI -> Dependency Inject ์์กด์ฑ ์ฃผ์ ์ด๋ผ๊ณ ํ๋ค. ์ด์ ์ Koin์ ๊ดํ ๋ธ๋ก๊ทธ๋ฅผ ์์ฑ ํ์ ๋๋ ๊ณต๋ถ๋ฅผ ํ์์ง๋ง Hilt๋ฅผ ์ข ๋ ๋ง์ด ์์๋ณด๋ ค ๋ค์๊ธ ๊ธ์ ์ด๋ค. ์ด์ ์ ์ผ๋ Koin์ ๊ดํ ๋ธ๋ก๊ทธ ์์กด์ฑ ์ฃผ์ ์ Koin๐ช ํ ๋ข์ - 1 ์์กด์ฑ ์ฃผ์ ์ด๋ผ.. ๋๋ฌด๋๋ ์ต์ํ์ง ์์ ๋ฌธ์ฅ์ด๋ค. ๋จ์๊ฒ ์์กดํ์ง๋ง๊ณ ์ฃผ์ฒด์ ์ผ๋ก ์ด์ ๋ผ๋ ๋ง์ ์ฌ์ฉํ ๋๋ง ์ผ๋ ๋จ์ด๋ฅผ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ ์ด์ํ๊ณ ๋จ๋ฒ์ ์ดํด๊ฐ ๋์ง ์๋๋ค. ์์กด taekwon-seungwon.tistory.com ์์กด์ฑ ์ฃผ์ ์ Koin๐ช ๋ ๋ข์ - 2 ์ด๋ฒ์ ์ค์ ๋ก..
์๋๋ก์ด๋ ๊ฐ๋ฐ์ ํ๋ฉด์ ๊ฐ์ฅ ์ค์ํ ์ ์ ๊ทธ๋ฅ ๊ธฐ๋ฅ์ ์ ๋ถ์ด๋๊ฒ ์๋๋๊ฑธ ๋ง์ ๋ถ๋ค์ด ๊ณต๊ฐํ์ค๊ฑฐ๋ค. ํธ๋ํฐ๋ ์์ ์ปดํจํฐ์ด๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ์ ํด์ผํ๊ณ ๊ณผ๋ถํ๊ฐ ์ค์ง ์๊ฒ, ์ฌ์ฉ์๊ฐ ๋งค๋๋ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๊ฐ๋ฐ์ ํ๋๊ฒ ๊ฐ๋ฐ์ ์ํ๋ค๊ณ ์๊ฐํ๋ค.(ํ์ฌ๊น์ง...) ์ฐ์ฐจ๊ฐ ์์ด๊ณ ๊ฒฌํด์ ์ง์์ด ์กฐ๊ธ์ฉ ๋์ด๊ฐ์๋ก ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ๋ค์ด ๋ณํด๊ฐ๋ฉด์ ๊ณต๋ถํด์ผํ๋ ๊ฒ๋ค์ด ๋ง์์ง๋ค. ๋ฐฐ์์๋ ๋์ด ์๋ ๊ฒ ๊ฐ๋ค. ์ผ๋จ Thread๋ ๋ฌด์์ธ๊ฐ? ๐ ์ฌ์ ์ ์๋ฏธ - "ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ์ฌ๋ฌ ํ๋ฆ์ ๋จ์" - ํ๋ก์ธ์ค์ ํน์ ํ ์ํ ๊ฒฝ๋ก - ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ์ ๋จ์ ๐ง๐ป๐ป ์ดํดํ๊ธฐ ์ฌ์ด ๋๋ง์ ์๋ฏธ - ๋ฐฅ์ ๋ง๋ค ๋ ๋ฐฅ์ฅ์ ์ทจ์ฌ๋ฒํผ์ ๋๋ฅด๊ณ ๋ฐฅ์ด ๋ค ๋ ๋๊น์ง ๊ตญ์ ๋์ธ๋ค..
์ค๋์ ํ์ด์ด๋ฒ ์ด์ค์ remote config๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋์ง ์์๋ณด๋ ค๊ณ ํ๋ค. ํ์๋ ์ฑ์ ๊ผญ ์ ๋ฐ์ดํธ๋ฅผ ํด์ผํ๋ ๊ฒฝ์ฐ์ ์ด ๊ฒ์ ์ฌ์ฉํ๊ณ ์๋ค. ์ผ๋จ Firebase์ Remote Config๋ ์ฑ์์ ๋ณ๋์ ์ ๋ฐ์ดํธ๋ฅผ ํ์ง ์์๋ ์ฑ์ ๋์์ด๋ ๋ชจ์์ ๋ณ๊ฒฝํ ์ ์๋ ํด๋ผ์ฐ๋ ์๋น์ค์ด๋ค. ๋ง์ฝ ํ์์ ๊ฐ์ ๋ฒ์ ์ฒดํฌ๋ฅผ ํ์ฌ ์ฑ์ ๊ฐ์ ์ ๋ฐ์ดํธํ๊ฒ ๋ง๋ค๊ณ ์ถ๋ค๋ ์ ์ ํ์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํด๋ณด๊ฒ ๋ค. ์ผ๋จ firebase์ ๋ด ์ฑ์ด ์ฐ๊ฒฐ๋์ด ์๋ค๋ ์ ์ ํ์ ์งํํ๊ฒ ๋ค. (์ถํ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์์ฑํ ์์ ) 1. gradle์ implementation ์ํจ๋ค. implementation 'com.google.firebase:firebase-core:21.1.0' implementation 'co..
Databinding์ ์ฌ์ฉ ํ๊ณ ์์ด! ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฐ๋์ง ์๊ฒ ์ด. ๊ทผ๋ฐ ์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ค์ ์ด๋ป๊ฒ ๊ฐ๊ณตํด์ ๋ฐ๋ก ์จ? ์๊ฐ์ด๋ ํ์ ๋ญ ํ๋ฌผ๋ฉฐ ์ฌ์ฉ์ ์ฑ๋ณ์ด๋ผ๋ ๊ฐ๊ณตํด์ ๋ณด์ฌ์ค์ผํ๋๊ฑฐ ์๋๊ฐ? ๊ทธ๋ผ ๋ ๋ค๋ฅธ ๊ณณ์์ ์ฃผ์ ํด์ค์ผํ๋๊ฑฐ ์๋์ผ? ๋ผ๊ณ ์๊ฐํ์ง๋ง… ์~์ฃผ ์ข์ ๊ธฐ๋ฅ์ด ์๋ค.(์ด๋ฌ๋ฉด ๋ท๋ง์ด ๊ถ๊ธํด์ ๋ฒ์ด๋๊ธฐ ํ๋ค๋ค ๐คฆโ๏ธ) 1. ์ผ๋จ ์ฌ์ฉํ Data class๋ฅผ ๋ง๋ ๋ค. data class Memo( // @SerializedName("id") object ์ค ํด๋น ๊ฐ์ด null ๊ฒฝ์ฐ // -> json ์ผ๋ก ๋ง๋ค ํ๋๋ฅผ ์๋ ์๋ต @SerializedName("id") @Expose val id: Int, โ @SerializedName("title") @Expose val me..
์ด๋ฒ์ RecyclerView ViewPager image ๋ค์ ์ด๋ป๊ฒ ํ๋ฉด Databinding์ ์ฌ์ฉํ ์ ์๋์ง ์ ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ณดํต RecyclerView๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Adapter ๋ฐ๋ณต๋ Layout RecyclerView๋ฅผ ์ฌ์ฉํ๋ ๊ณณ์์์ ์ ์ธ ๋ค์ด ํ์ํ๋ฐ Databinding์ ์ด์ฉํ๋ฉด ์ฝ๊ฐ์ฉ ๋ฌ๋ผ์ง๊ฒ ๋๋ค. (๊ธฐ๋ณธ์ ์ธ RecyclerView๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ํ์ ์งํํ๊ฒ ์ต๋๋ค ๐โ๏ธ) 1. ๊ฐ์ฅ ๋จผ์ ๋ฐ๋ณตํ์ฌ ์ฌ์ฉํ Layout์ ๋ง๋ค์ด์ค๋๋ค. โ โ โ โ โ โ โ ์์ ๊ฐ์ด ๋ฐ์ธ๋ฉ์ผ๋ก ๋ฌถ์ด์ฃผ๊ณ ์ฌ์ฉํ item(data class) ๋ชจ๋ธ์ variable๋ก ์ ์ธ ํด์ค๋๋ค. ์ ์ธํ item์ผ๋ก ๊ฐ View์ ๋ฃ์ด์ค๋๋ค. (์นด์นด์ค ์ฃผ์์ฐพ๊ธฐ api๋ฅผ ์ฌ์ฉํจ ๐บ๐ผ) 2. A..
Databinding์ด๋!(๋ฐ์ดํฐ ๋ฌถ๊ธฐ?) → ์๋๋ก์ด๋์์์ data binding ์ด๋, Android Archictecture Components ์ ํ ๋ถ๋ถ์ผ๋ก์ Ui ์์์ ๋ฐ์ดํฐ๋ฅผ ํ๋ก๊ทธ๋จ์ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐํ์ง ์๊ณ , ์ ์ธ์ ํ์์ผ๋ก ๊ฒฐํฉํ ์ ์๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋งํ๋ค. ์ฝ๊ฒ ์ค๋ช ํ๋ฉด MVVMํจํด์ ์ฌ์ฉํ๋ฉด์ Activity๋ Fragment์์ ๋ทฐ ๊ด๋ จ๋ ์ฝ๋๋ค์ ์ฌ์ฉํ์ง ์๊ณ xml ์ฝ๋์ ์ง์ด ๋ฃ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์ด๊ฒ๋ค์ ViewModel์์ ๊ด๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ๋ ๋ ๋ ํผ๋ถ์ ์๋ฟ๊ฒ ๋งํ์๋ฉด Activity๋ Fragment์์ ๋ง์ ์ฝ๋๋ค์ ์ ์ง ์๊ฒ ํจ์ผ๋ก์จ ๋ทฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ณํ์ํค๋ ์ฝ๋๋ ViewModel์์ ๊ด๋ฆฌํด์ Activity & Fragment ๋ค์ ์ฝ๋๋ ๋์ฑ ..
์ด๋ฒ์ ์ค์ ๋ก ํ๋ก๊ทธ๋จ์ ์์กด์ฑ ์ฃผ์ (DI)๋ฅผ ์ ์ฉ์์ผ๋ณด๋ฉด์ ์ฝ์ง์ ์ฐ์์์ ๋๊ผ๋ ์ ๊ณผ ํ์ํ ๋ถ๋ถ์ ์์ฑํ ์์ ์ ๋๋ค. 1. Fragment๋ผ๋ฆฌ ViewModel์ ๊ณต์ ํ๊ณ ์ถ์ ๋! class JoinEntrepreneurFragment: Fragment() { ... private val viewModel: JoinViewModel by sharedViewModel() โ ... } โ class JoinMainFragment : SoftKeyboardImplementFragment() { ... private val viewModel: JoinViewModel by sharedViewModel() โ ... } ์์ ๊ฐ์ ํ์์ผ๋ก sharedViewModel() ๋ฅผ ์ ์ด์ค๋ค๋ฉด Fragment๊ฐ ..