π» κ°λ°/iOS
곡λΆν κ² μ½λ£¨ν΄ μκ²λ κ² 1. μ½λ£¨ν΄ μ΄μ μ μ΄μ΄ μ½λ£¨ν΄ μ λν΄ νμ΅νλ€. μ½λ£¨ν΄μ μ½λ£¨ν΄ μ€μ½ν λ₯Ό ν΅ν΄μ μ€νν μ μλ€. μ½λ£¨ν΄ μ€μ½ν λ₯Ό μ¬μ©νμ§ μκ³ λ μ½λ£¨ν΄μ μ€νν μ μμ§λ§ μ΄λ° κ²½μ°μ μμ
μ΄ μ’
λ£λ μ½λ£¨ν΄μ λν΄ λ³λμ μ²λ¦¬λ₯Ό ν΄μ€μΌ νλ€. Coroutine Scope Coroutine Scope λ μ½λ£¨ν΄μ λ²μλ₯Ό μ μνλ μΈν°νμ΄μ€ μ΄λ€. λ§ κ·Έλλ‘ μ½λ£¨ν΄μ΄ μ€νλλ λ²μλ₯Ό μ§μ νλ€. λͺ¨λ μ½λ£¨ν΄μ Scope λ΄μμ μ€νλμ΄μΌ νκ³ μ‘ν°λΉν° λ νλκ·Έλ¨ΌνΈ μ μλͺ
μ£ΌκΈ° μ λ°λΌ μ½λ£¨ν΄ μ μ·¨μ νμ¬ λ©λͺ¨λ¦¬ λ¦ μ λ°©μ§νλ€. Global Scope μ Coroutine Scope κ° μ‘΄μ¬νλ€. 1. Global Scope : μ±μ μλͺ
μ£ΌκΈ°μ ν¨κ» λμνκΈ°μ λ³λμ μλͺ
μ£ΌκΈ° κ΄λ¦¬κ° ..
π» κ°λ°/iOS
곡λΆν κ² μ½λ£¨ν΄ νλ‘κ·Έλλ¨Έμ€ 1λ¬Έμ μκ²λ κ² 1. μ½λ£¨ν΄ μ½λ£¨ν΄ μ λΉλκΈ° μ²λ¦¬ λ₯Ό μν΄ μ½νλ¦° μμ μ§μνλ λΌμ΄λΈλ¬λ¦¬ μ΄λ€. μ°μ λκΈ° μ λΉλκΈ° μ λν΄μ μμ보μ. λκΈ°λ μλ΅μ μμ²νμ λ λ°ν κ°μ μ»κΈ° μ κΉμ§ λκΈ°νλ κ²μ λ»νκ³ , λΉλκΈ°λ λκΈ°μκ° λ³λμ Taskλ₯Ό μννλ κ²μ λ»νλ€. λμμ± μ²λ¦¬ μλ
OS μμ
μ λ€μ λ λμμ± μ²λ¦¬ μ λν΄μ λ°°μ μλ€. κ·Έλ°λ° κ°μκΈ° λμμ± μ²λ¦¬λ₯Ό μ μκΈ°νλλ, λμμ± μ²λ¦¬κ° λΉλκΈ°μ κ°λ
μ΄ μ μ©λμ΄ μκΈ° λλ¬Έμ΄λ€. λμμ± μ²λ¦¬λ λ§ κ·Έλλ‘ λμμ μ¬λ¬ κ°μ νλ‘μΈμ€κ° λμμ μ€νλλ κ²μ²λΌ 보μ΄λ κ²μ΄λ€. (Context Switching μ΄ λ°μνλ€.) μ±κΈ μ½μ΄ μμ λ©ν° μ°λ λ λ₯Ό ν΅ν΄μ μ΄λ₯Ό ꡬννκ³ μλ€. μ°λ λ λμμ± μ²λ¦¬λ₯Ό μν΄μ..
π» κ°λ°/iOS
곡λΆν κ² μλλ‘μ΄λ κ°μ μκ° μμ‘΄μ± μ£Όμ
νλ‘κ·Έλλ¨Έμ€ 1λ¬Έμ μκ²λ κ² 1. μμ‘΄μ± μ£Όμ
(Dependancy Injection) μ΄λ²μ μμ‘΄μ± μ£Όμ
μ΄λΌλ κ²μ μ²μ μ νκ² λλ€. μμ‘΄μ± μ΄λΌλ λ¨μ΄ μ체λ₯Ό build.gradle μ μ μΈνλ implementation 'org.jetbrains... μ²λΌ λΌμ΄λΈλ¬λ¦¬ μΆκ° λ§κ³ λ μ ν΄λ³Έ μ μ΄ μμλ€. μλ¬΄νΌ μ€λ κ°μ λ₯Ό μκ°νλ©΄μ μμ‘΄μ± μ£Όμ
λΌμ΄λΈλ¬λ¦¬μΈ Koin μ μ νκ³ μ΄μ κ΄ν΄μ μ’ λ μ°Ύμ보λ μκ°μ κ°μ‘λ€. μμ‘΄μ± μ£Όμ
μ΄λΌλ κ°λ
μ체λ μ΄λ ΅μ§ μμλ€. μ°μ μ½λλ₯Ό μ΄ν΄λ³΄μ. class Car { private val engine = Engine() private fun start() { engine.start() } } class En..
π» κ°λ°/iOS
곡λΆν κ² MVC, MVP, MVVM, AAC μκ²λ κ² 1. MVC μ°μ κ°μ₯ μΌλ°μ μΌλ‘ μ¬μ©λλ μν€ν
μ³ ν¨ν΄μ΄λ€. Model, View, Controller λ‘ λλλ€. Model μ λ°μ΄ν° μμ±, μμ , κ°±μ λ±μ λ‘μ§μ΄ λ€μ΄μλ€. View λ μ¬μ©μμκ² λ³΄μ¬μ§λ νλ©΄μ΄λ€. Controller λ μ¬μ©μμ μ
λ ₯μ μ²λ¦¬νλ€. μ°μ μ¬μ©μκ° View λ₯Ό ν΅ν΄μ μ
λ ₯μ΄ λ€μ΄μ€κ³ Controller κ° μ΄λ₯Ό μ²λ¦¬νλ€. μ΄ λ μ
λ ₯μ λΆμν΄μ Model κ³Ό View μ κ°±μ μμ²μ νλ€. Model μ λ°μ΄ν°λ₯Ό κ°±μ νκ³ View λ UI λ₯Ό κ°±μ νλ€. μ 리νμλ©΄, Controller λ Model κ³Ό View κ° λ¬΄μμ ν΄μΌν μ§ μκ³ μκ³ μ΄λ₯Ό ν΅μ νκ³ μλ€. Controller λ₯Ό ν΅ν΄μ Model κ³Ό..
π» κ°λ°/iOS
곡λΆν κ² μλλ‘μ΄λ κ°μ μκ° CameraX Glide Content Resolver ScaleGestureDetector μκ²λ κ² 1. AddTextChangedListener λλΆλΆμ μ΄ν리μΌμ΄μ
μμ κ²μμ°½μ κ²μμ΄λ₯Ό μ
λ ₯νλ©΄ μ¬μ©μκ° Enter λ₯Ό λλ₯΄κΈ°λ μ μ μ
λ ₯ν κ²μμ΄μ λ°λΌ μλμμ± κ²μμ΄κ° λ³κ²½λλ κ²μ λ³Ό μ μλ€. μ΄λ₯Ό ꡬννκΈ° μν΄μ EditText μ ν
μ€νΈ λ³νλ₯Ό κ°μ§ν΄μΌνλλ° μ΄λ₯Ό AddTextChangedListener λ₯Ό ν΅ν΄ κ°μ§ν μ μλ€. private fun bindViews() = with(binding) { editTextView.addTextChangedListener { Log.d("Changed!", editTextView.text.toString()) ..
π» κ°λ°/iOS
곡λΆν κ² μλλ‘μ΄λ κ°μ μκ° 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
곡λΆν κ² μλλ‘μ΄λ κ°μ μκ° μκ²λ κ² 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
곡λΆν κ² μλλ‘μ΄λ κ°μ μκ° μΉ΄μΉ΄μ€ν‘, 곡곡λ°μ΄ν° API Retrofit, OkHttpLoggingInterceptor FusedLocationProvider Coroutine AppWidgetProvider Service Lifecycle μκ²λ κ² 1. FusedLocationProvider μλλ‘μ΄λμμ μμΉ μ 보λ₯Ό λ°μμ¬ μ μλ λ°©λ²μλ LocationManager μ FusedLocationProvider κ° μλ€. μ°μ LocationManager μ getLastKnownLocation λλ LocationListener λ₯Ό ν΅ν΄μ μμΉ μ 보λ₯Ό κ°μ Έμ¬ μ μλ€. // LocationManager λ₯Ό μ μνλ€. val locationManager = getSystemService(LOCA..
π» κ°λ°/iOS
곡λΆν κ² μλλ‘μ΄λ κ°μ μκ° AppWidgetProvider νλ‘κ·Έλλ¨Έμ€ 1λ¬Έμ μκ²λ κ² μλλ‘μ΄λ μμ ―μ μ¬μ©νκΈ° μν΄μλ Manifest μ Recevier λ₯Ό λ±λ‘νκ³ μ΄ λ action κ³Ό meta-data λ₯Ό λ£μ΄μ€λ€. meta-data : μμ ― λ μ΄μμμ ν¬κΈ°, μ΄κΈ° λ μ΄μμ 리μμ€, μ
λ°μ΄νΈ λΉλ λ± μ± μμ ―μ κΈ°λ³Έμ μΈ νΉμ±μ μ μνλ€. minWidth, minHeight : μμ ―μ΄ κΈ°λ³Έμ μΌλ‘ μ¬μ©νλ μ΅μ ν¬κΈ°μ΄λ€. updatePeriodMillis : onUpdate λ©μλλ₯Ό νΈμΆνμ¬ μμ ―μ μ
λ°μ΄νΈνλ λΉλλ₯Ό κ²°μ νλ€. μ
λ°μ΄νΈ μμ λλ°μ΄μ€ λκΈ°λͺ¨λκ° ν΄μ λλ―λ‘ λ°±κ·ΈλΌμ΄λμμλ μ΅μ 30λΆ, μ΄λ³΄λ€ 짧μ μκ° κ°κ²©μΌλ‘ μ
λ°μ΄νΈνλ κ²μ κΈνλ€. previewImage : μ± μμ ―..
π» κ°λ°/iOS
곡λΆν κ² μλλ‘μ΄λ κ°μ μκ° κΉνλΈ API Retrofit2 Room SharedPreference μκ²λ κ² μμμ μΈν
νΈ λ₯Ό μ¬μ©ν κ²½μ° action κ³Ό category λ νμ μμμ΄λ€. μΈλΆ μ€ν΄ μ μ΄μ©νμ¬ νΉμ Url μΌ λ μ‘ν°λΉν°κ° νΈμΆλλλ‘ κ΅¬νν μ μλ€. μΈλΆ μ±μ μ€ννκ³ λ€μ μ‘ν°λΉν°λ‘ λμμ¨ κ²½μ° onCreate κ° μλ OnNewIntent κ° νΈμΆλλ€. Room μ μ¬μ©ν λ Entity μμ Primary Key λ Null μ΄ λ μ μλ€. (λΉμ°) PreferenceManager λ₯Ό ν΅ν΄ κΈ°κΈ° λ΄λΆμ λ°μ΄ν°λ₯Ό μ μ₯ν μ μλ€. 곡λΆν κ² μ½λ£¨ν΄ μ λν΄ μμ§ λ―Έμνλ€. 곡μ λ¬Έμμ λ―Έλμ λΈλ‘κ·Έλ₯Ό μ°Έκ³ νμ¬ κ³΅λΆνμ. λλ μ λ°°μΈκ² λ무 λ§λ€. μ΄μ¬ν μ΄μμΌκ² λ€.