πŸ’» 개발/iOS

πŸ’» 개발/iOS

[TIL] 22.03.23

κ³΅λΆ€ν•œ 것 코루틴 μ•Œκ²Œλœ 것 1. 코루틴 μ–΄μ œμ— 이어 코루틴 에 λŒ€ν•΄ ν•™μŠ΅ν–ˆλ‹€. 코루틴은 코루틴 μŠ€μ½”ν”„ λ₯Ό ν†΅ν•΄μ„œ μ‹€ν–‰ν•  수 μžˆλ‹€. 코루틴 μŠ€μ½”ν”„ λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ λ„ 코루틴을 μ‹€ν–‰ν•  수 μžˆμ§€λ§Œ 이런 κ²½μš°μ— μž‘μ—…μ΄ μ’…λ£Œλœ 코루틴에 λŒ€ν•΄ λ³„λ„μ˜ 처리λ₯Ό ν•΄μ€˜μ•Ό ν•œλ‹€. Coroutine Scope Coroutine Scope λŠ” μ½”λ£¨ν‹΄μ˜ λ²”μœ„λ₯Ό μ •μ˜ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€ 이닀. 말 κ·ΈλŒ€λ‘œ 코루틴이 μ‹€ν–‰λ˜λŠ” λ²”μœ„λ₯Ό μ§€μ •ν•œλ‹€. λͺ¨λ“  코루틴은 Scope λ‚΄μ—μ„œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•˜κ³  μ•‘ν‹°λΉ„ν‹° λ‚˜ ν”„λž˜κ·Έλ¨ΌνŠΈ 의 생λͺ…μ£ΌκΈ° 에 따라 코루틴 을 μ·¨μ†Œ ν•˜μ—¬ λ©”λͺ¨λ¦¬ λ¦­ 을 λ°©μ§€ν•œλ‹€. Global Scope 와 Coroutine Scope κ°€ μ‘΄μž¬ν•œλ‹€. 1. Global Scope : μ•±μ˜ 생λͺ…주기와 ν•¨κ»˜ λ™μž‘ν•˜κΈ°μ— λ³„λ„μ˜ 생λͺ… μ£ΌκΈ° 관리가 ..

πŸ’» 개발/iOS

[TIL] 22.03.22

κ³΅λΆ€ν•œ 것 코루틴 ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 1문제 μ•Œκ²Œλœ 것 1. 코루틴 코루틴 은 비동기 처리 λ₯Ό μœ„ν•΄ μ½”ν‹€λ¦° μ—μ„œ μ§€μ›ν•˜λŠ” 라이브러리 이닀. μš°μ„  동기 와 비동기 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž. λ™κΈ°λŠ” 응닡을 μš”μ²­ν–ˆμ„ λ•Œ λ°˜ν™˜ 값을 μ–»κΈ° μ „κΉŒμ§€ λŒ€κΈ°ν•˜λŠ” 것을 λœ»ν•˜κ³ , λΉ„λ™κΈ°λŠ” λŒ€κΈ°μ‹œκ°„ λ³„λ„μ˜ Taskλ₯Ό μˆ˜ν–‰ν•˜λŠ” 것을 λœ»ν•œλ‹€. λ™μ‹œμ„± 처리 μž‘λ…„ OS μˆ˜μ—…μ„ 듀을 λ•Œ λ™μ‹œμ„± 처리 에 λŒ€ν•΄μ„œ λ°°μ› μ—ˆλ‹€. 그런데 κ°‘μžκΈ° λ™μ‹œμ„± 처리λ₯Ό μ™œ μ–˜κΈ°ν•˜λŠλƒ, λ™μ‹œμ„± μ²˜λ¦¬κ°€ λΉ„λ™κΈ°μ˜ κ°œλ…μ΄ μ μš©λ˜μ–΄ 있기 λ•Œλ¬Έμ΄λ‹€. λ™μ‹œμ„± μ²˜λ¦¬λŠ” 말 κ·ΈλŒ€λ‘œ λ™μ‹œμ— μ—¬λŸ¬ 개의 ν”„λ‘œμ„ΈμŠ€κ°€ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” 것이닀. (Context Switching 이 λ°œμƒν•œλ‹€.) μ‹±κΈ€ μ½”μ–΄ μ—μ„œ λ©€ν‹° μ“°λ ˆλ“œ λ₯Ό ν†΅ν•΄μ„œ 이λ₯Ό κ΅¬ν˜„ν•˜κ³  μžˆλ‹€. μ“°λ ˆλ“œ λ™μ‹œμ„± 처리λ₯Ό μœ„ν•΄μ„œ..

πŸ’» 개발/iOS

[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..

πŸ’» 개발/iOS

[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 κ³Ό..

πŸ’» 개발/iOS

[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()) ..

πŸ’» 개발/iOS

[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) } ν•˜μ§€λ§Œ 정말 λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜κ³  μžˆμ—ˆλ‹€. ..

πŸ’» 개발/iOS

[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..

πŸ’» 개발/iOS

[TIL] 22.03.14

κ³΅λΆ€ν•œ 것 μ•ˆλ“œλ‘œμ΄λ“œ κ°•μ˜ μˆ˜κ°• μΉ΄μΉ΄μ˜€ν†‘, 곡곡데이터 API Retrofit, OkHttpLoggingInterceptor FusedLocationProvider Coroutine AppWidgetProvider Service Lifecycle μ•Œκ²Œλœ 것 1. FusedLocationProvider μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œ μœ„μΉ˜ 정보λ₯Ό λ°›μ•„μ˜¬ 수 μžˆλŠ” λ°©λ²•μ—λŠ” LocationManager 와 FusedLocationProvider κ°€ μžˆλ‹€. μš°μ„  LocationManager 은 getLastKnownLocation λ˜λŠ” LocationListener λ₯Ό ν†΅ν•΄μ„œ μœ„μΉ˜ 정보λ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€. // LocationManager λ₯Ό μ •μ˜ν•œλ‹€. val locationManager = getSystemService(LOCA..

πŸ’» 개발/iOS

[TIL] 22.03.13

κ³΅λΆ€ν•œ 것 μ•ˆλ“œλ‘œμ΄λ“œ κ°•μ˜ μˆ˜κ°• AppWidgetProvider ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 1문제 μ•Œκ²Œλœ 것 μ•ˆλ“œλ‘œμ΄λ“œ μœ„μ ―μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” Manifest 에 Recevier λ₯Ό λ“±λ‘ν•˜κ³  이 λ•Œ action κ³Ό meta-data λ₯Ό λ„£μ–΄μ€€λ‹€. meta-data : μœ„μ ― λ ˆμ΄μ•„μ›ƒμ˜ 크기, 초기 λ ˆμ΄μ•„μ›ƒ λ¦¬μ†ŒμŠ€, μ—…λ°μ΄νŠΈ λΉˆλ„ λ“± μ•± μœ„μ ―μ˜ 기본적인 νŠΉμ„±μ„ μ •μ˜ν•œλ‹€. minWidth, minHeight : μœ„μ ―μ΄ 기본적으둜 μ‚¬μš©ν•˜λŠ” μ΅œμ†Œ 크기이닀. updatePeriodMillis : onUpdate λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ μœ„μ ―μ„ μ—…λ°μ΄νŠΈν•˜λŠ” λΉˆλ„λ₯Ό κ²°μ •ν•œλ‹€. μ—…λ°μ΄νŠΈ μ‹œμ— λ””λ°”μ΄μŠ€ λŒ€κΈ°λͺ¨λ“œκ°€ ν•΄μ œλ˜λ―€λ‘œ λ°±κ·ΈλΌμš΄λ“œμ—μ„œλŠ” μ΅œμ†Œ 30λΆ„, 이보닀 짧은 μ‹œκ°„ κ°„κ²©μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜λŠ” 것을 κΈˆν•œλ‹€. previewImage : μ•± μœ„μ ―..

πŸ’» 개발/iOS

[TIL] 22.03.10

κ³΅λΆ€ν•œ 것 μ•ˆλ“œλ‘œμ΄λ“œ κ°•μ˜ μˆ˜κ°• κΉƒν—ˆλΈŒ API Retrofit2 Room SharedPreference μ•Œκ²Œλœ 것 μ•”μ‹œμ  μΈν…νŠΈ λ₯Ό μ‚¬μš©ν•  경우 action κ³Ό category λŠ” ν•„μˆ˜ μš”μ†Œμ΄λ‹€. μ™ΈλΆ€ μŠ€ν‚΄ 을 μ΄μš©ν•˜μ—¬ νŠΉμ • Url 일 λ•Œ μ•‘ν‹°λΉ„ν‹°κ°€ ν˜ΈμΆœλ˜λ„λ‘ κ΅¬ν˜„ν•  수 μžˆλ‹€. μ™ΈλΆ€ 앱을 μ‹€ν–‰ν•˜κ³  λ‹€μ‹œ μ•‘ν‹°λΉ„ν‹°λ‘œ λŒμ•„μ˜¨ 경우 onCreate κ°€ μ•„λ‹Œ OnNewIntent κ°€ ν˜ΈμΆœλœλ‹€. Room 을 μ‚¬μš©ν•  λ•Œ Entity μ—μ„œ Primary Key λŠ” Null 이 될 수 μ—†λ‹€. (λ‹Ήμ—°) PreferenceManager λ₯Ό 톡해 κΈ°κΈ° 내뢀에 데이터λ₯Ό μ €μž₯ν•  수 μžˆλ‹€. 곡뢀할 것 코루틴 에 λŒ€ν•΄ 아직 λ―Έμˆ™ν•˜λ‹€. 곡식 λ¬Έμ„œμ™€ λ―Έλ””μ—„ λΈ”λ‘œκ·Έλ₯Ό μ°Έκ³ ν•˜μ—¬ κ³΅λΆ€ν•˜μž. λŠλ‚€ 점 배울게 λ„ˆλ¬΄ λ§Žλ‹€. μ—΄μ‹¬νžˆ μ‚΄μ•„μ•Όκ² λ‹€.

kodo_o
'πŸ’» 개발/iOS' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (3 Page)