π» κ°λ°/iOS
2022.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()) ..
π» κ°λ°/iOS
2022.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) } νμ§λ§ μ λ§ λ€μν κΈ°λ₯μ μ 곡νκ³ μμλ€. ..
π» κ°λ°/iOS
2022.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..
π» κ°λ°/iOS
2022.03.14
곡λΆν κ² μλλ‘μ΄λ κ°μ μκ° μΉ΄μΉ΄μ€ν‘, 곡곡λ°μ΄ν° API Retrofit, OkHttpLoggingInterceptor FusedLocationProvider Coroutine AppWidgetProvider Service Lifecycle μκ²λ κ² 1. FusedLocationProvider μλλ‘μ΄λμμ μμΉ μ 보λ₯Ό λ°μμ¬ μ μλ λ°©λ²μλ LocationManager μ FusedLocationProvider κ° μλ€. μ°μ LocationManager μ getLastKnownLocation λλ LocationListener λ₯Ό ν΅ν΄μ μμΉ μ 보λ₯Ό κ°μ Έμ¬ μ μλ€. // LocationManager λ₯Ό μ μνλ€. val locationManager = getSystemService(LOCA..
π» κ°λ°/iOS
2022.03.13
곡λΆν κ² μλλ‘μ΄λ κ°μ μκ° AppWidgetProvider νλ‘κ·Έλλ¨Έμ€ 1λ¬Έμ μκ²λ κ² μλλ‘μ΄λ μμ ―μ μ¬μ©νκΈ° μν΄μλ Manifest μ Recevier λ₯Ό λ±λ‘νκ³ μ΄ λ action κ³Ό meta-data λ₯Ό λ£μ΄μ€λ€. meta-data : μμ ― λ μ΄μμμ ν¬κΈ°, μ΄κΈ° λ μ΄μμ 리μμ€, μ
λ°μ΄νΈ λΉλ λ± μ± μμ ―μ κΈ°λ³Έμ μΈ νΉμ±μ μ μνλ€. minWidth, minHeight : μμ ―μ΄ κΈ°λ³Έμ μΌλ‘ μ¬μ©νλ μ΅μ ν¬κΈ°μ΄λ€. updatePeriodMillis : onUpdate λ©μλλ₯Ό νΈμΆνμ¬ μμ ―μ μ
λ°μ΄νΈνλ λΉλλ₯Ό κ²°μ νλ€. μ
λ°μ΄νΈ μμ λλ°μ΄μ€ λκΈ°λͺ¨λκ° ν΄μ λλ―λ‘ λ°±κ·ΈλΌμ΄λμμλ μ΅μ 30λΆ, μ΄λ³΄λ€ μ§§μ μκ° κ°κ²©μΌλ‘ μ
λ°μ΄νΈνλ κ²μ κΈνλ€. previewImage : μ± μμ ―..
βοΈ μ½ν
μ€λΉ/String
2022.03.13
λ¬Έμ νμ΄ μΈμ΄ Kotlin μ½λ class Solution { fun solution(record: Array): Array { val history = arrayListOf() val name = mutableMapOf() val result = arrayListOf() for (e in record.iterator()) { val act = e.split(" ") when (act[0]) { "Enter" -> { name[act[1]] = act[2] history.add(Pair(act[0], act[1])) } "Leave" -> { history.add(Pair(act[0], act[1])) } "Change" -> { name[act[1]] = act[2] } } } history.map ..
βοΈ μ½ν
μ€λΉ/Implementation
2022.03.12
μ°μ κ°λ§μ μκ³ λ¦¬μ¦ λ¬Έμ λ₯Ό μ νλ ν°λΌ λ§μ΄ μ΄λ €μ λ€. FE / APP κ°λ° μ§κ΅°μ μ ννκ³ μ΄ 4λ¬Έμ κ° λμλλ° DP 1, ꡬν 1, κ·Έλν 2 μ΄λ κ² λμλ€. μ¬μ μ΄ μμ΄μ 30λΆ μ λ λ€λ¦κ² μ°Έμνκ³ 2μκ° λμ 2λ² νλλ§ νμλ€. μκ°μ΄ λ μμμ΄λ λ€λ₯Έ λ¬Έμ λ₯Ό νμ§ λͺ»νμ κ²μ΄λ€. μλλ‘μ΄λ κ³΅λΆ λλ¬Έμ μκ³ λ¦¬μ¦μ μνν νλλ° μμΌλ‘λ νΈμνμ§ λ§κ³ μκ³ λ¦¬μ¦λ κΎΈμ€ν νμ΄μΌκ² λ€. λ¬Έμ λ¬Έμ μ μκΆμ μν΄μ μΊ‘μ³λ νμ§ λͺ»νκ³ κ°λ¨νκ² μ€λͺ
νμλ©΄ μ£Όμ΄μ§ λ°°μ΄μ μ¬μ λ ¬νλ λ¬Έμ μλ€. μκ³ λ°©ν₯, λ°μκ³ λ°©ν₯μΌλ‘ μ΄ 2κ°μ§μ λ°©ν₯μ΄ μμμΌλ©° λ°°μ΄μ ν¬κΈ°λ νμμ μ§μκ° μ‘΄μ¬νλ€. κ²°κ³Όμ μΌλ‘ μ΄ 4κ°μ§ κ²½μ° λν΄ λ°°μ΄μ μ¬μ λ ¬νλ λ¬Έμ μλ€. νμ΄ μΈμ΄ Kotlin μ½λ class Solution ..
βοΈ μ½ν
μ€λΉ/String
2022.03.11
νμ΄ μΈμ΄ Kotlin μ½λ fun solution(s: String): Int { var minLength = s.length for (i in 0 until s.length / 2) { var subString = s.slice(0..i) var answer = "" var cnt = 1 var last = 0 for (j in i + 1 until s.length - i step i + 1) { // λ§μ§λ§ Index λ₯Ό μ μ₯νλ€. last = j + i + 1 // κ°μ SubString μΈ κ²½μ° μ΄λ₯Ό μΉ΄μ΄νΈνλ€. if (subString == s.slice(j..j + i)) cnt += 1 // λ€λ₯Έ SubString μΈ κ²½μ° else { if (cnt > 1) { // μ«μ + SubStri..
π» κ°λ°/iOS
2022.03.10
곡λΆν κ² μλλ‘μ΄λ κ°μ μκ° κΉνλΈ API Retrofit2 Room SharedPreference μκ²λ κ² μμμ μΈν
νΈ λ₯Ό μ¬μ©ν κ²½μ° action κ³Ό category λ νμ μμμ΄λ€. μΈλΆ μ€ν΄ μ μ΄μ©νμ¬ νΉμ Url μΌ λ μ‘ν°λΉν°κ° νΈμΆλλλ‘ κ΅¬νν μ μλ€. μΈλΆ μ±μ μ€ννκ³ λ€μ μ‘ν°λΉν°λ‘ λμμ¨ κ²½μ° onCreate κ° μλ OnNewIntent κ° νΈμΆλλ€. Room μ μ¬μ©ν λ Entity μμ Primary Key λ Null μ΄ λ μ μλ€. (λΉμ°) PreferenceManager λ₯Ό ν΅ν΄ κΈ°κΈ° λ΄λΆμ λ°μ΄ν°λ₯Ό μ μ₯ν μ μλ€. 곡λΆν κ² μ½λ£¨ν΄ μ λν΄ μμ§ λ―Έμνλ€. 곡μ λ¬Έμμ λ―Έλμ λΈλ‘κ·Έλ₯Ό μ°Έκ³ νμ¬ κ³΅λΆνμ. λλ μ λ°°μΈκ² λ무 λ§λ€. μ΄μ¬ν μ΄μμΌκ² λ€.
βΉοΈ λΌμ΄ν/νκ³
2022.03.05
λλμ΄ λ§μ§λ§ μΌκΈ°! μ¬λ¬ μ¬μ§κ³Ό ν¨κ» λ λ¬κ°μ λ―Έκ΅ μνμμ λλ μ μ μ μ΄λ³΄λ €κ³ νλ€. μΆκ΅ μ λ§μ§λ§ μΌν μΈλμ λ ν΄λ¦¬μ€μ μλ μμΈλ μ κ°λ€. ν΄λ‘μμ μ λ¬Όλ‘ μ€ μ·μ μ¬κ³ μ΄κ³³ μ κ³³ λμλ€λ
λ€. λ―Έκ΅ μλ
~, νκ΅ μλ
! λ―Έκ΅μ μμΌλ©΄μ νκ΅ κ°κ³ μΆλ€λ μκ°μ΄ κ΅΄λ κ°μλλ° λ§μ νκ΅μΌλ‘ λμκ°λ €λ λκ° μμ¬μ λ€. μμΉ΄κ³ λ λ΄μμ λͺ» κ°μ κ·Έλ°κ±΄κ°.. π₯Ί λ―Έκ΅μ μ¬ κΈ°νκ° μκΈ°κ² λλ€λ©΄ κ·Έ λ λλμλ₯Ό κΌ κ°λ΄μΌκ² λ€. κ·Έλμ μ΄λ μ΄μ? μ μ μκΈ°νλ κ²μ²λΌ νλ‘μ νΈλ₯Ό μ§ννλ©΄μ κ°λ°κ³Ό λ
Όλ¬Έμ λͺ¨λ ν΄κ²°ν΄μΌ νκΈ°μ μκ°λ³΄λ€ λ§μ΄ λ°μκ² μμ§μλ λ―Έκ΅ μνμ΄μλ€. λ
Όλ¬Έ... μ§μ§ μ΄ λμ λ
Όλ¬Έ λλ¬Έμ λλ¦λλ‘ μ€νΈλ μ€λ₯Ό λ°μκ³ λ΄κ° μκ°νλ λ―Έκ΅ μνκ³Ό μ‘°κΈ λ¬λκΈ°μ λ―Έκ΅μ μμ λλ 'νκ΅ ..