λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🍎 iOS

[비동기 처리] 비동기 μ²˜λ¦¬λž€?

by hyebin (Helia) 2023. 9. 18.
λ°˜μ‘ν˜•

비동기(Asynchronous)

비동기 처리 λ°©μ‹μ΄λž€ μž‘μ—…μ„ λ…λ¦½μ μœΌλ‘œ λ™μ‹œμ— μ‹€ν–‰ν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ° κ°œλ…μž…λ‹ˆλ‹€. 각 μž‘μ—… μ™„λ£Œλ  λ•ŒκΉŒμ§€ 기닀릴 ν•„μš” 없이 ν”„λ‘œκ·Έλž¨μ΄ λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. 즉, λ³‘λ ¬μ μœΌλ‘œ μž‘μ—…(task)을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

 

비동기 처리 방식은 μš”μ²­μ— λŒ€ν•œ κ²°κ³Όκ°€ μ£Όμ–΄μ§€λŠ”λ° μ‹œκ°„μ΄ 걸리더라도 κ·Έ μ‹œκ°„ λ™μ•ˆ λ‹€λ₯Έ μž‘μ—…μ„ ν•  수 μžˆμ–΄ μžμ›μ„ 효율적으둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 동기 방식보닀 λ³΅μž‘ν•˜κ³  task의 μ‹€ν–‰μˆœμ„œκ°€ 보μž₯λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€.

 

비동기 μ½”λ“œ

  • λ‚˜μ€‘μ— μ•Œ 수 μ—†λŠ” μ‹œκ°„μ— 호좜될 수 μžˆλŠ” μ½”λ“œ
  • λ°”λ‘œ μ‹€ν–‰λ˜μ§€ μ•ŠμŒ
  • 이후 라인에 μžˆλŠ” μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” 것을 막지 μ•ŠμŒ
  • 보톡 ν΄λ‘œμ €λ₯Ό 톡해 ν•΄λ‹Ή μ‹œμ μ„ μ•Œλ €μ€Œ
    • completionHandler ν˜Ήμ€ completion

 

동기(Synchronous)

동기 처리 λ°©μ‹μ΄λž€ μš”μ²­μ„ 보낸 ν›„ 응닡을 λ°›μ•„μ•Όλ§Œ λ‹€μŒ λ™μž‘μ΄ μ΄λ€„μ§ˆ 수 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ° κ°œλ…μž…λ‹ˆλ‹€. μš”μ²­μ— λŒ€ν•œ κ²°κ³Όκ°€ μ–Όλ§ˆλ‚˜ κ±Έλ¦¬λ˜μ§€ κ²°κ³Όκ°€ 올 λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•©λ‹ˆλ‹€. task듀이 직렬적으둜 μˆ˜ν–‰λ˜μ–΄, ν•œ taskλ₯Ό μ²˜λ¦¬ν•  λ™μ•ˆ λ‹€λ₯Έ task듀은 λŒ€κΈ°ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

동기 처리 방식은 섀계가 맀우 κ°„λ‹¨ν•˜κ³  μ§κ΄€μ μ΄μ§€λ§Œ, κ²°κ³Όκ°€ 올 λ•ŒκΉŒμ§€ 계속 λŒ€κΈ°λ§Œ ν•˜κ²Œ λ˜μ–΄ μ‹œμŠ€ν…œ 효율이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.

 

Swiftμ—μ„œ 비동기 처리

swiftμ—μ„œλŠ” λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ 비동기 처리λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€. GCD, async/await, Combine λ“±λ“± λ‹€μ–‘ν•œ 방법이 μ• ν”Œμ—μ„œ 제곡되며, PromiseKit, Alamofire, RxSwift λ“± λ‹€μ–‘ν•œ μ™ΈλΆ€ ν”„λ ˆμž„μ›Œν¬μ™€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€.

 

λ‹€μ–‘ν•œ 비동기 처리 방식듀 쀑 ν”„λ‘œμ νŠΈμ˜ μš”κ΅¬μ‚¬ν•­, swift 버전, μ½”λ“œ ꡬ쑰와 μ•„ν‚€ν…μ²˜ λ“± λ‹€μ–‘ν•œ μš”μ†Œλ“€μ„ κ³ λ €ν•΄ 상황에 맞게 μ μ ˆν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

이후 ν¬μŠ€νŠΈμ—λŠ” GCDλΆ€ν„° μˆœμ„œλŒ€λ‘œ 비동기 처리 방식에 λŒ€ν•΄ μ•Œμ•„λ³΄λ €κ³  ν•©λ‹ˆλ‹€.

 

λ°˜μ‘ν˜•

'🍎 iOS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[SwiftUI] Stack (VStack/HStack/ZStack)  (0) 2024.04.08
[SwiftUI] Property Wrappers  (0) 2024.04.04
[SwiftUI] SwiftUIλž€?  (0) 2023.03.15
Pinch Gesture  (0) 2023.01.13
Swipe Gesture  (0) 2023.01.12