๐ป ๊ฐ๋ฐ
[TIL] 22.03.20
๊ณต๋ถํ ๊ฒ ์๋๋ก์ด๋ ๊ฐ์ ์๊ฐ ์์กด์ฑ ์ฃผ์ ํ๋ก๊ทธ๋๋จธ์ค 1๋ฌธ์ ์๊ฒ๋ ๊ฒ 1. ์์กด์ฑ ์ฃผ์ (Dependancy Injection) ์ด๋ฒ์ ์์กด์ฑ ์ฃผ์ ์ด๋ผ๋ ๊ฒ์ ์ฒ์ ์ ํ๊ฒ ๋๋ค. ์์กด์ฑ ์ด๋ผ๋ ๋จ์ด ์์ฒด๋ฅผ build.gradle ์ ์ ์ธํ๋ implementation 'org.jetbrains... ์ฒ๋ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ ๋ง๊ณ ๋ ์ ํด๋ณธ ์ ์ด ์์๋ค. ์๋ฌดํผ ์ค๋ ๊ฐ์ ๋ฅผ ์๊ฐํ๋ฉด์ ์์กด์ฑ ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Koin ์ ์ ํ๊ณ ์ด์ ๊ดํด์ ์ข ๋ ์ฐพ์๋ณด๋ ์๊ฐ์ ๊ฐ์ก๋ค. ์์กด์ฑ ์ฃผ์ ์ด๋ผ๋ ๊ฐ๋ ์์ฒด๋ ์ด๋ ต์ง ์์๋ค. ์ฐ์ ์ฝ๋๋ฅผ ์ดํด๋ณด์. class Car { private val engine = Engine() private fun start() { engine.start() } } class En..
[TIL] 22.03.19
๊ณต๋ถํ ๊ฒ MVC, MVP, MVVM, AAC ์๊ฒ๋ ๊ฒ 1. MVC ์ฐ์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ํคํ ์ณ ํจํด์ด๋ค. Model, View, Controller ๋ก ๋๋๋ค. Model ์ ๋ฐ์ดํฐ ์์ฑ, ์ญ์ , ๊ฐฑ์ ๋ฑ์ ๋ก์ง์ด ๋ค์ด์๋ค. View ๋ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ํ๋ฉด์ด๋ค. Controller ๋ ์ฌ์ฉ์์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ค. ์ฐ์ ์ฌ์ฉ์๊ฐ View ๋ฅผ ํตํด์ ์ ๋ ฅ์ด ๋ค์ด์ค๊ณ Controller ๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ค. ์ด ๋ ์ ๋ ฅ์ ๋ถ์ํด์ Model ๊ณผ View ์ ๊ฐฑ์ ์์ฒญ์ ํ๋ค. Model ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๊ณ View ๋ UI ๋ฅผ ๊ฐฑ์ ํ๋ค. ์ ๋ฆฌํ์๋ฉด, Controller ๋ Model ๊ณผ View ๊ฐ ๋ฌด์์ ํด์ผํ ์ง ์๊ณ ์๊ณ ์ด๋ฅผ ํต์ ํ๊ณ ์๋ค. Controller ๋ฅผ ํตํด์ Model ๊ณผ..
[TIL] 22.03.17
๊ณต๋ถํ ๊ฒ ์๋๋ก์ด๋ ๊ฐ์ ์๊ฐ CameraX Glide Content Resolver ScaleGestureDetector ์๊ฒ๋ ๊ฒ 1. AddTextChangedListener ๋๋ถ๋ถ์ ์ดํ๋ฆฌ์ผ์ด์ ์์ ๊ฒ์์ฐฝ์ ๊ฒ์์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์ฌ์ฉ์๊ฐ Enter ๋ฅผ ๋๋ฅด๊ธฐ๋ ์ ์ ์ ๋ ฅํ ๊ฒ์์ด์ ๋ฐ๋ผ ์๋์์ฑ ๊ฒ์์ด๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ EditText ์ ํ ์คํธ ๋ณํ๋ฅผ ๊ฐ์งํด์ผํ๋๋ฐ ์ด๋ฅผ AddTextChangedListener ๋ฅผ ํตํด ๊ฐ์งํ ์ ์๋ค. private fun bindViews() = with(binding) { editTextView.addTextChangedListener { Log.d("Changed!", editTextView.text.toString()) ..
[TIL] 22.03.16
๊ณต๋ถํ ๊ฒ ์๋๋ก์ด๋ ๊ฐ์ ์๊ฐ Retrofit2, OkHttpLoggingInterceptor Shimmer Glide Content Resolver Unsplash API ์๊ฒ๋ ๊ฒ 1. Glide ์ค๋ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ Glide ๊ฐ ์๊ฐ๋ณด๋ค ์์ฒญ ๊ฐ๋ ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. Glide ๋ฅผ ์ฌ์ฉํ์ง๋ ๊ฝค ๋์ง๋ง ์ด๋ฅผ ์ ๋๋ก ์ฌ์ฉํ๊ณ ์์ง ์์๋ค. ์ฐ์ ๊ทธ๋์ Glide ๋ฅผ ์ฌ์ฉํ ๋ ์๋์ฒ๋ผ ์จ์๋ค. ๊ทธ๋ฅ ๋จ์ํ ์ด๋ฏธ์ง๋ทฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ด์ฃผ๊ธฐ ์ํ ์ฉ๋๋ก... private fun bindViews() { Glide.with(binding.root) .load(profileImageUrl) .into(binding.profileImageView) } ํ์ง๋ง ์ ๋ง ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์๋ค. ..
[TIL] 22.03.15
๊ณต๋ถํ ๊ฒ ์๋๋ก์ด๋ ๊ฐ์ ์๊ฐ ์๊ฒ๋ ๊ฒ 1. OkHttpLogging Retrofit ์ ์ฌ์ฉํด์ API ๋ฅผ ํธ์ถํ ๋ ํด๋ผ์ด์ธํธ์ ๋ฌธ์ ์ธ์ง ์๋ฒ์ ๋ฌธ์ ์ธ์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด HTTP ์ ๋ก๊ทธ๋ฅผ ๋ด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด OkHttp ์ HttpLoggingInterceptor ์ด๋ค. // Retrofit Interface ๋ฅผ ๊ตฌํํ๋ค. private val openApiService : OpenApiService by lazy { Retrofit.Builder() .baseUrl(Url.OPEN_API_BASE_URL) .addConverter(GsonConverterFactory.create()) .client(buildOkHttpClient()) .build() .crea..
[TIL] 22.03.14
๊ณต๋ถํ ๊ฒ ์๋๋ก์ด๋ ๊ฐ์ ์๊ฐ ์นด์นด์คํก, ๊ณต๊ณต๋ฐ์ดํฐ API Retrofit, OkHttpLoggingInterceptor FusedLocationProvider Coroutine AppWidgetProvider Service Lifecycle ์๊ฒ๋ ๊ฒ 1. FusedLocationProvider ์๋๋ก์ด๋์์ ์์น ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ์ ์๋ ๋ฐฉ๋ฒ์๋ LocationManager ์ FusedLocationProvider ๊ฐ ์๋ค. ์ฐ์ LocationManager ์ getLastKnownLocation ๋๋ LocationListener ๋ฅผ ํตํด์ ์์น ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค. // LocationManager ๋ฅผ ์ ์ํ๋ค. val locationManager = getSystemService(LOCA..
[TIL] 22.03.13
๊ณต๋ถํ ๊ฒ ์๋๋ก์ด๋ ๊ฐ์ ์๊ฐ AppWidgetProvider ํ๋ก๊ทธ๋๋จธ์ค 1๋ฌธ์ ์๊ฒ๋ ๊ฒ ์๋๋ก์ด๋ ์์ ฏ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Manifest ์ Recevier ๋ฅผ ๋ฑ๋กํ๊ณ ์ด ๋ action ๊ณผ meta-data ๋ฅผ ๋ฃ์ด์ค๋ค. meta-data : ์์ ฏ ๋ ์ด์์์ ํฌ๊ธฐ, ์ด๊ธฐ ๋ ์ด์์ ๋ฆฌ์์ค, ์ ๋ฐ์ดํธ ๋น๋ ๋ฑ ์ฑ ์์ ฏ์ ๊ธฐ๋ณธ์ ์ธ ํน์ฑ์ ์ ์ํ๋ค. minWidth, minHeight : ์์ ฏ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ต์ ํฌ๊ธฐ์ด๋ค. updatePeriodMillis : onUpdate ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์์ ฏ์ ์ ๋ฐ์ดํธํ๋ ๋น๋๋ฅผ ๊ฒฐ์ ํ๋ค. ์ ๋ฐ์ดํธ ์์ ๋๋ฐ์ด์ค ๋๊ธฐ๋ชจ๋๊ฐ ํด์ ๋๋ฏ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ์ต์ 30๋ถ, ์ด๋ณด๋ค ์งง์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๊ธํ๋ค. previewImage : ์ฑ ์์ ฏ..
[TIL] 22.03.10
๊ณต๋ถํ ๊ฒ ์๋๋ก์ด๋ ๊ฐ์ ์๊ฐ ๊นํ๋ธ API Retrofit2 Room SharedPreference ์๊ฒ๋ ๊ฒ ์์์ ์ธํ ํธ ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ action ๊ณผ category ๋ ํ์ ์์์ด๋ค. ์ธ๋ถ ์คํด ์ ์ด์ฉํ์ฌ ํน์ Url ์ผ ๋ ์กํฐ๋นํฐ๊ฐ ํธ์ถ๋๋๋ก ๊ตฌํํ ์ ์๋ค. ์ธ๋ถ ์ฑ์ ์คํํ๊ณ ๋ค์ ์กํฐ๋นํฐ๋ก ๋์์จ ๊ฒฝ์ฐ onCreate ๊ฐ ์๋ OnNewIntent ๊ฐ ํธ์ถ๋๋ค. Room ์ ์ฌ์ฉํ ๋ Entity ์์ Primary Key ๋ Null ์ด ๋ ์ ์๋ค. (๋น์ฐ) PreferenceManager ๋ฅผ ํตํด ๊ธฐ๊ธฐ ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค. ๊ณต๋ถํ ๊ฒ ์ฝ๋ฃจํด ์ ๋ํด ์์ง ๋ฏธ์ํ๋ค. ๊ณต์ ๋ฌธ์์ ๋ฏธ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ๊ณต๋ถํ์. ๋๋ ์ ๋ฐฐ์ธ๊ฒ ๋๋ฌด ๋ง๋ค. ์ด์ฌํ ์ด์์ผ๊ฒ ๋ค.
[Android] ์นด๋ฉ๋ผ ๋๋ ๊ฐค๋ฌ๋ฆฌ์์ ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ
๊ตฌํ ๊ธฐ๋ฅ ์นด๋ฉ๋ผ ์ ๊ฐค๋ฌ๋ฆฌ ์์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ ImageView ์ ๋ฃ์ด์ฃผ๋ ๊ธฐ๋ฅ ๊ตฌํ ์ฝ๋ ๊ตฌํ ๊ฒฐ๊ณผ ์ค๋ฅ ๋ด์ฉ ์นด๋ฉ๋ผ ์์ ์ด๋ฏธ์ง ๋ฅผ ์ดฌ์ํ๊ณ ์ด๋ฅผ ์ ๋ฌ๋ฐ์ผ๋ฉด ์ ์์ ์ผ๋ก ImageView ์ ์ฝ์ ๋๋๋ฐ ๊ฐค๋ฌ๋ฆฌ ์์ ์ด๋ฏธ์ง ๋ฅผ ์ ํํ๊ณ ์ด๋ฅผ ์ ๋ฌ๋ฐ์ผ๋ฉด ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ฐ์ ์ค๋ฅ ๋ด์ฉ์ null , ์ฝ์ด๋ณด๋ null ์ ๋นํธ๋งต ์ด๋ฏธ์ง๋ก ๋ณํํ ์ ์๋ค๋ ์ค๋ฅ์๋ค. ์ด์ ๋ ๊ฐ๋จํ๋ค. ์นด๋ฉ๋ผ ์์ ์ดฌ์ํ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ๋ onActivityResult ํจ์์์ data ๋ฅผ ํตํด ์ดฌ์ํ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋๋ฐ ์ด ๋ data?.extras?.get("data") ๋ฅผ ํตํด์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค. ์ ์ฝ๋๊ฐ ์นด๋ฉ๋ผ์์ ์ดฌ์ํ ์ด๋ฏธ์ง์ด๋ฉด ์ ์์ ์ผ๋ก ๋์ํ์ง๋ง ๊ฐค๋ฌ๋ฆฌ์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ..
[Android] ๋ค๊ตญ์ด ์ง์
์ดํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณผ์ ์์ ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ง์ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. 1. ์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ด๋ก ์ ์ธํ๋ค๊ณ ์น์. 2. res > values > strings ์ ์๋ก์ด strings.xml ์ ์ถ๊ฐํ๋ค. 3. locale์ ์ ํํ๊ณ >> ๋ฅผ ํด๋ฆญํ๋ค. 4. ko, South Korea ๋ฅผ ํด๋ฆญํ๋ค. 5. ํ์ผ์ด ์์ฑ๋ ๋ชจ์ต์ด๋ค. 6. ์์ด๋ก ์ ์ธํ string.xml ๊ณผ ๊ฐ์ name์ ๊ฐ์ง string ํ๊ทธ๋ฅผ ์์ฑํ๊ณ value๋ง ํ๊ตญ์ด๋ก ๋ฐ๊ฟ์ค๋ค. 7. ๋ณ๋ค๋ฅธ ์์ ์์ด ๊ธฐ๋ณธ ์ธ์ด๋ง ๋ณ๊ฒฝํด๋ ์ฑ ๋ด๋ถ์ ํ ์คํธ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.