Taekwondo
2020๋
7์๋ถํฐ ์ง๊ธ๊น์ง ์ฝ 3๋
๊ฐ ๋์ฅ ์๋ฒ๋จ ์์ด๋ค ์๋ ค์ฃผ๋ฉด์ ์ ์ ์์ด๋ค์ด ์ค๋ ฅ๋ ์ค๋ฅด๊ณ ๊ณ ๋์ด๋ ๊ธฐ์ ์ ์ ๋ณด์ผ ์ ์๋ ์ฒด๋ ฅ๊ณผ ๊ทผ๋ ฅ์ด ๋ฐ์ณ์ฃผ๋ ๊ฒ ๊ฐ์์ ์ฒด์กฐ๋์์์ 2๋ฐํด ์ด์ ํ์ ํ๋ ๊ธฐ์ ๋ค์ ์๋ ค์ฃผ๋ คํ๋ค. ํ์ญ ์์ ์๋ ๊ทธ๋ฅ ๊ธฐ์ ๊ณผ ์ง์ ์์ด ํ์ผ๋ก๋ง ๋๊ณ ์ ๋๋ก ์ฑ๊ณตํ์ง ๋ชปํ๋ ๊ธฐ์ ์ธ๋ฐ ์ ์ ๋
ธ๋ จํด์ ธ์ ์ง์์ด ์์ธ ์ํ์์ ํด๋ณด๋ ์ฒซ ๋์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ผ๋จ ์ด๋ฒ ๊ธ(2023๋
4์ 3์ผ ์์์ผ)์ ์ฑ๊ณตํ ๊ธ์ ์๋๋ค. ์ผ์ฃผ์ผ์ 1๋ฒ์ ๋ ์์ด๋ค์ ๊ฐ๋ฅด์น๊ณ ๊ณ ์ 5๋ฒ์ ๋ ์๋ํ๊ธฐ ๋๋ฌธ์ ์์์ผ๋ก ๋ถ์ํ ์ ์๋ ์๊ฐ๋ ๋ถ์กฑํ๋ค. ๊ทธ๋ ๊ธฐ์ ์ ์ผํ๊ฒ ํ ๋ฒ ์ฐ์ด๋ณธ ์์์ผ๋ก ๋ถ์์ ํ ํ ๋ค์์ ์๋ํ ์์์ ์ถ๊ฐ๋ก ์ฌ๋ฆฌ๋ คํ๋ค. ์๋ ์์์ 2023๋
4์ 3์ผ(์)์ ์ฐ์ ์์. ์ฐฉ์ง๊ฐ..
Development/Compose
๋๋ฌด๋๋ ๋ฆ์์ง๋ง Jetpack Compose Camp 2022๋ฅผ ๋ง๋ฌด๋ฆฌํ ํ๊ธฐ๋ฅผ ์์ฑํด๋ณด๋ ค๊ณ ํ๋ค. Compose Camp๋ก ์ด๋ํฉ๋๋ค! developersonair.withgoogle.com (์์ ๋งํฌ๋ ์์ง ๋จ์์๊ธธ๋ ๊ฐ์ ธ์๋ดค๋ค) ์ด๋ฒ์๋ 2021๋
์๋ Compose camp๊ฐ ์๋๋ผ Devfest 2021 Android Jetpack Compose Codelab๋ผ๋ ์ด๋ฆ์ผ๋ก ๋์์๋ค. ๊ทธ๋์๋ ๋ค๋ฅด๊ฒ 2022๋
๋๋ ์ด๊ธ๋ฐ ์ค๊ธ๋ฐ์ผ๋ก ๋๋ ์ฝ๋๋ฉ์ ์งํํ๊ณ ๋ฌด์จ ์์ ๊ฐ์ธ์ง ๋ชจ๋ฅด๊ฒ ๋๋ ์ค๊ธ๋ฐ์ผ๋ก ์ง์ํด์ Camp๋ฅผ ์งํํ๋ค. 2021๋
๋์ ์ฝ๋๋ฉ์ ํ๊ณ ๋์ ์ค์ ๋ก๋ ํ๋ก์ ํธ์ ์ ์ฉ์ํค๊ธฐ ์ด๋ ต๋ค๋ ์๊ฐ์ ๊ด๋ จ ์๋ฃ๋ง ํ์ํ๊ณ ์ธ์ ์งํํ์ง ํ๋ฉด์ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ 1๋
์ด ์ง๋๋ฒ๋ ธ๋๋ฐ ์ค๊ธ๋ฐ์ผ๋ก ์ ์ฒญํ๊ฑด ๋ฌด..
Development/Compose
Compose๊ฐ ๋ญ๊น? ๋ป์ผ๋ก๋ ๊ตฌ์ฑํ๋ค, ์๊ณกํ๋ค ๋ผ๋ ๋ป์ ๊ฐ์ง๊ณ ์๋๋ฐ ์๋๋ก์ด๋์์๋ Compose๋ Jetpack Compose์ ํ ๊ฐ์ง๋ก ๋ค์ดํฐ๋ธ Android UI๋ฅผ ๋น๋ํ๊ธฐ ์ํ ์ต์ ๋๊ตฌ ํคํธ์
๋๋ค. ๋งํฌ → https://developer.android.com/jetpack/compose/documentation Jetpack Compose ์์ํ๊ธฐ | Android Developers Jetpack Compose ์์ํ๊ธฐ ์ปฌ๋ ์
์ ์ฌ์ฉํด ์ ๋ฆฌํ๊ธฐ ๋ด ํ๊ฒฝ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ฝํ
์ธ ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฅํ์ธ์. Jetpack Compose๋ ๋ค์ดํฐ๋ธ Android UI๋ฅผ ๋น๋ํ๊ธฐ ์ํ ์ต์ ๋๊ตฌ ํคํธ์
๋๋ค. ์ฌ๊ธฐ์์ Compo developer.android.com ๊ธฐ์กด์ Android ์ XM..
Development/Android
์ค๋์ ํ์ด์ด๋ฒ ์ด์ค์ remote config๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋์ง ์์๋ณด๋ ค๊ณ ํ๋ค. ํ์๋ ์ฑ์ ๊ผญ ์
๋ฐ์ดํธ๋ฅผ ํด์ผํ๋ ๊ฒฝ์ฐ์ ์ด ๊ฒ์ ์ฌ์ฉํ๊ณ ์๋ค. ์ผ๋จ Firebase์ Remote Config๋ ์ฑ์์ ๋ณ๋์ ์
๋ฐ์ดํธ๋ฅผ ํ์ง ์์๋ ์ฑ์ ๋์์ด๋ ๋ชจ์์ ๋ณ๊ฒฝํ ์ ์๋ ํด๋ผ์ฐ๋ ์๋น์ค์ด๋ค. ๋ง์ฝ ํ์์ ๊ฐ์ ๋ฒ์ ์ฒดํฌ๋ฅผ ํ์ฌ ์ฑ์ ๊ฐ์ ์
๋ฐ์ดํธํ๊ฒ ๋ง๋ค๊ณ ์ถ๋ค๋ ์ ์ ํ์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํด๋ณด๊ฒ ๋ค. ์ผ๋จ firebase์ ๋ด ์ฑ์ด ์ฐ๊ฒฐ๋์ด ์๋ค๋ ์ ์ ํ์ ์งํํ๊ฒ ๋ค. (์ถํ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์์ฑํ ์์ ) 1. gradle์ implementation ์ํจ๋ค. implementation 'com.google.firebase:firebase-core:21.1.0' implementation 'co..
Development/Android
Databinding์ ์ฌ์ฉ ํ๊ณ ์์ด! ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฐ๋์ง ์๊ฒ ์ด. ๊ทผ๋ฐ ์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ค์ ์ด๋ป๊ฒ ๊ฐ๊ณตํด์ ๋ฐ๋ก ์จ? ์๊ฐ์ด๋ ํ์ ๋ญ ํ๋ฌผ๋ฉฐ ์ฌ์ฉ์ ์ฑ๋ณ์ด๋ผ๋ ๊ฐ๊ณตํด์ ๋ณด์ฌ์ค์ผํ๋๊ฑฐ ์๋๊ฐ? ๊ทธ๋ผ ๋ ๋ค๋ฅธ ๊ณณ์์ ์ฃผ์
ํด์ค์ผํ๋๊ฑฐ ์๋์ผ? ๋ผ๊ณ ์๊ฐํ์ง๋ง… ์~์ฃผ ์ข์ ๊ธฐ๋ฅ์ด ์๋ค.(์ด๋ฌ๋ฉด ๋ท๋ง์ด ๊ถ๊ธํด์ ๋ฒ์ด๋๊ธฐ ํ๋ค๋ค ๐คฆโ๏ธ) 1. ์ผ๋จ ์ฌ์ฉํ Data class๋ฅผ ๋ง๋ ๋ค. data class Memo( // @SerializedName("id") object ์ค ํด๋น ๊ฐ์ด null ๊ฒฝ์ฐ // -> json ์ผ๋ก ๋ง๋ค ํ๋๋ฅผ ์๋ ์๋ต @SerializedName("id") @Expose val id: Int, โ @SerializedName("title") @Expose val me..
Development/Android
์ด๋ฒ์ RecyclerView ViewPager image ๋ค์ ์ด๋ป๊ฒ ํ๋ฉด Databinding์ ์ฌ์ฉํ ์ ์๋์ง ์ ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ณดํต RecyclerView๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Adapter ๋ฐ๋ณต๋ Layout RecyclerView๋ฅผ ์ฌ์ฉํ๋ ๊ณณ์์์ ์ ์ธ ๋ค์ด ํ์ํ๋ฐ Databinding์ ์ด์ฉํ๋ฉด ์ฝ๊ฐ์ฉ ๋ฌ๋ผ์ง๊ฒ ๋๋ค. (๊ธฐ๋ณธ์ ์ธ RecyclerView๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ํ์ ์งํํ๊ฒ ์ต๋๋ค ๐โ๏ธ) 1. ๊ฐ์ฅ ๋จผ์ ๋ฐ๋ณตํ์ฌ ์ฌ์ฉํ Layout์ ๋ง๋ค์ด์ค๋๋ค. โ โ โ โ โ โ โ ์์ ๊ฐ์ด ๋ฐ์ธ๋ฉ์ผ๋ก ๋ฌถ์ด์ฃผ๊ณ ์ฌ์ฉํ item(data class) ๋ชจ๋ธ์ variable๋ก ์ ์ธ ํด์ค๋๋ค. ์ ์ธํ item์ผ๋ก ๊ฐ View์ ๋ฃ์ด์ค๋๋ค. (์นด์นด์ค ์ฃผ์์ฐพ๊ธฐ api๋ฅผ ์ฌ์ฉํจ ๐บ๐ผ) 2. A..
Development/Android
Databinding์ด๋!(๋ฐ์ดํฐ ๋ฌถ๊ธฐ?) → ์๋๋ก์ด๋์์์ data binding ์ด๋, Android Archictecture Components ์ ํ ๋ถ๋ถ์ผ๋ก์ Ui ์์์ ๋ฐ์ดํฐ๋ฅผ ํ๋ก๊ทธ๋จ์ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐํ์ง ์๊ณ , ์ ์ธ์ ํ์์ผ๋ก ๊ฒฐํฉํ ์ ์๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋งํ๋ค. ์ฝ๊ฒ ์ค๋ช
ํ๋ฉด MVVMํจํด์ ์ฌ์ฉํ๋ฉด์ Activity๋ Fragment์์ ๋ทฐ ๊ด๋ จ๋ ์ฝ๋๋ค์ ์ฌ์ฉํ์ง ์๊ณ xml ์ฝ๋์ ์ง์ด ๋ฃ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์ด๊ฒ๋ค์ ViewModel์์ ๊ด๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ๋ ๋ ๋ ํผ๋ถ์ ์๋ฟ๊ฒ ๋งํ์๋ฉด Activity๋ Fragment์์ ๋ง์ ์ฝ๋๋ค์ ์ ์ง ์๊ฒ ํจ์ผ๋ก์จ ๋ทฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ณํ์ํค๋ ์ฝ๋๋ ViewModel์์ ๊ด๋ฆฌํด์ Activity & Fragment ๋ค์ ์ฝ๋๋ ๋์ฑ ..
Development/Android
์ด๋ฒ์ ์ค์ ๋ก ํ๋ก๊ทธ๋จ์ ์์กด์ฑ ์ฃผ์
(DI)๋ฅผ ์ ์ฉ์์ผ๋ณด๋ฉด์ ์ฝ์ง์ ์ฐ์์์ ๋๊ผ๋ ์ ๊ณผ ํ์ํ ๋ถ๋ถ์ ์์ฑํ ์์ ์
๋๋ค. 1. Fragment๋ผ๋ฆฌ ViewModel์ ๊ณต์ ํ๊ณ ์ถ์ ๋! class JoinEntrepreneurFragment: Fragment() { ... private val viewModel: JoinViewModel by sharedViewModel() โ ... } โ class JoinMainFragment : SoftKeyboardImplementFragment() { ... private val viewModel: JoinViewModel by sharedViewModel() โ ... } ์์ ๊ฐ์ ํ์์ผ๋ก sharedViewModel() ๋ฅผ ์ ์ด์ค๋ค๋ฉด Fragment๊ฐ ..
Development/Android
์์กด์ฑ ์ฃผ์
์ด๋ผ.. ๋๋ฌด๋๋ ์ต์ํ์ง ์์ ๋ฌธ์ฅ์ด๋ค. ๋จ์๊ฒ ์์กดํ์ง๋ง๊ณ ์ฃผ์ฒด์ ์ผ๋ก ์ด์ ๋ผ๋ ๋ง์ ์ฌ์ฉํ ๋๋ง ์ผ๋ ๋จ์ด๋ฅผ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ ์ด์ํ๊ณ ๋จ๋ฒ์ ์ดํด๊ฐ ๋์ง ์๋๋ค. ์์กด์ฑ ์ฃผ์
(์์กด๊ด๊ณ ์ฃผ์
)! Dependency Injection(DI) ๋ํ๋์ ์ธ์ ์
, ์์กด์ฑ์ฃผ์
์ ๋ํด ๊ฐ๋จํ๊ฒ ์ค๋ช
ํ๊ณ ์ถ์๋ฐ ๋ญ๋ผํด์ผ๋ ์ง ๋ชจ๋ฅด๊ฒ ๋ค. → ํ์ค์ ์ ์ ํ ์ ์๊ณ , ์ ์๋ ํ์ค์ ๋ฐํ์ผ๋ก ๊ฐ์ ์ค๊ณ๋ฅผ ํ๊ฒ ํ์ฌ์ค๋๋ค.(์ญ์๋ ํ ๋ฒ์ ์ดํด๊ฐ ๋์ง ์๋๋ค.) ์ข ๋ ๊ฐ๊น๊ฒ ์ ์ํ๋ค๋ฉด, ”์์กด๋์ B๊ฐ ๋ณํ๋ฉด, ๊ทธ๊ฒ์ด A์ ์ํฅ์ ๋ฏธ์น๋ค .” - ์ด์ผ๋ฏผ, ํ ๋น์ ์คํ๋ง 3.1, ์์ด์ฝ(2012), p113 B๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ ํ์์ด ๋ฐ๋๋ฉด A์ ์ํฅ์ด ๊ฐ๋ค. (์ฌ์ง : Jacob) ๐ฅ ํ์๋ฅผ ๊ฐ๋ฅด์น๋ ํ๊ถ๋..
Development/Android
์ด๋ฒ์ FCM์ด ์ค๋ฉด ํน์ ํ์ด์ง๋ฅผ ๋ณด๊ณ ์๋ค๋ฉด ๊ทธ ํ์ด์ง์์ refresh๋ฅผ ํด์ผํ๋ ์ผ์ด ์๊ฒผ๋ค. ๋ฐ๋ก ๊ตฌํํ๋ ค๊ณ ํ๋ค๋ณด๋ Listener๋ฅผ ๋ฌ์์ผํ๋ ํ๋ ์๊ฐ์ ํ๋ฉด ๋ญ๊ฐ ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ง์ด ์๊ธธ ๊ฒ ๊ฐ๊ณ ๊ท์ฐฎ์ ์์
์ด ๋๊ฒ ๋ค ์ถ์ด์ ๊ตฌ๊ธ๋ง์ ํด๋ณด๋ Event Bus ๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ผ๋ ์ถ์ฒ ๊ธ์ ๋ณด๊ฒ ๋๋ค. Event Bus๊ฐ ๋ญ์ผ? ๐๋ฒ์ค์์ ๐์ด๋ฒคํธ๐ ํ๋? (์ฃ์กํฉ๋๋ค) ๋ผ๋ ์๊ฐ์ ๊ด๋ จ ๊ธ์ ์ฐพ์๋ณด๋ ๋ฒ์ค ๋คํธ์ํฌ์ ๋์ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ ํ๋์ ์ด๋ฒคํธ๋ฅผ ๋์ผ ์ฑ๋์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋
ธ๋(Subscriber)๋ค์๊ฒ ๋ณด๋ด๋ ๋ฐฉ์ ์ด๋ผ๋๋ฐ ๊ฐ๋จํ๊ฒ ๋์ ์ฉ์ด๋ก ์ค๋ช
ํ์๋ฉด A ์ฑ๋์ ๊ตฌ๋
ํ๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์๋ฆผ(evnet)์ ๋ณด๋ธ๋ค. Github์ ํด๋น ์ด๋ฏธ์ง๋ ๊ฐ์ด ์๋ค. (์ฌ์ค ์ฒ์..