λκΈ°μ λΉλκΈ°μ λν΄ λ€μλ μΈμ λ΄μ©μ λ λ₯νκ² μ΄ν΄ν΄λ³΄λ € νλ€!
λκΈ°μ λΉλκΈ° κ°λ μ λν΄ κ³΅λΆν΄λ³΄μβπ»
GCD - Grand Central Dispatch
1. μ°λ λ (Thread)
μ°μ μ°λ λλ..??!
μ»΄ν¨ν° νλ‘κ·Έλ¨μ μ€ννλλ° μ¬μ©λλ κ°μ₯ μμ μ€ν λ¨μλ₯Ό μλ―Ένλ€.
μ°λ λλ νλ‘μΈμ€ λ΄μμ μ€νλλ μμ λ¨μμ μ€ν νλ¦μ΄λ€.
κ°κ°μ μ°λ λλ λ 립μ μΌλ‘ μ€νλ μ μμΌλ©°, μ¬λ¬ μ°λ λκ° λμμ μμ μ μνν μ μλ€.
μ΄λ¬ν λ€μ€ μ°λ λ μμ μ μμ€ν μμμ ν¨μ¨μ μΌλ‘ νμ©νκ³ , λ³λ ¬μ μΌλ‘ μμ μ μ²λ¦¬ν μ μλλ‘ λμμ€λ€!
μ΄λ¬ν λ΄μ©μ΄ λ¬΄μ¨ λ»μ΄λ!
"μ°λ λ π λμμ μΌμ ν μ μλ κ²μ λ¨μ" μ λλ‘λ§ κΈ°μ΅νλ©΄ λλ€.
λ©μΈ μ°λ λ μ΄μΈμ μ°λ λκ° νμν μ΄μ λ λκΉ??
λ©μΈ μ€λ λλ λ€νΈμν¬ ν΅μ μ λ°°μ°κΈ° μ΄μ μ μμ ν λ λͺ¨λ μΌμ λ€ λ΄λΉνκ³ μμλ€. μ΄ λͺ¨λ μΌμλ UIλ₯Ό 그리λ μΌλ ν¬ν¨λλ€!
νΉνλ UIλ λ©μΈ μ€λ λμμλ§ μ λ°μ΄νΈκ° κ°λ₯νλ€. κ·Έλμ μκ°μ΄ μ’ κ±Έλ¦¬λ λ€νΈμν¬ ν΅μ κ³Ό κ°μ λμλ λ©μΈμ€λ λμκ² μν¨λ€λ©΄ λ€νΈμν¬ ν΅μ μ νλ λμμ λ€λ₯Έ μΌμ λͺ»ν΄μ μ±μ νλ©΄μ΄ λ©μΆ μ μλ€λ μ .
λλ¬Έμ λ©μΈ μ°λ λ μ΄μΈμ μ°λ λμ νμμ±μ΄ μκΈ΄λ€.
2. GCD (Grand Central Dispatch)
GCDλ iOSμμ μ°λ λλ₯Ό κ΄λ¦¬νλ APIμ΄λ€.
λ€λ§ μ§μ μ μΌλ‘ μ°λ λμκ² μΌμ μν€λ 건 μλκ³ , λμ€ν¨μΉνλ₯Ό ν΅ν΄ μμ μ λΆμ°ν΄μ£Όκ³ μ΄ μ°λ λμ μ«μλ₯Ό κ΄λ¦¬ν΄μ£Όλ μν μ νλ€.
"μ΄λ€ μΌμ λκ° μ΄λ»κ² ν μ§ κ΄λ¦¬νλ κ²" μΌλ‘ κΈ°μ΅νλ©΄ μ’λ€.
3. DispatchQueue
GCDλ λμ€ν¨μΉν(DispatchQueue)λ₯Ό ν΅ν΄μ taskλ€μ κ΄λ¦¬νλ€.
μ΄λ¦μμ μ μ μλ―μ΄ queue κ΅¬μ‘°λ‘ λμ΄μμ΄μ FIFO(First In First Out)μ μμλ₯Ό κ°μ§λ€.
DispatchQueue.main.sync { // λκΈ°, μμ°¨
}
DispatchQueue.main.async { // λΉλκΈ°, μμ°¨
}
DispatchQueue.global().sync { // λκΈ°, λμ
}
DispatchQueue.global().async { // λΉλκΈ°, λμ
}
μ 리νμλ©΄ μ΄λ° ꡬ쑰μ΄λ€!
- DispatchQueue : iOS μμ λμμ± νλ‘κ·Έλλ°μ λκΈ°μν΄ μ 곡νλ queue
- global : Dispatch Queue μ μ’ λ₯
- async : λΉλκΈ°
π― μ¬μ€ μ€μ λ‘ μ½λλ₯Ό μμ±νλ€ λ³΄λ©΄ DispatchQueue.main.async, DispatchQueue.global().async λ§ μ£Όλ‘ μ¬μ©νλ€ π―
λκΈ°(Synchronous) vs λΉλκΈ°(Asynchronous)
1. λκΈ°(Synchronous)
λκΈ°λ μμ°¨μ μΌλ‘ μ§νλλ κ²μ μλ―Ένλ€.
ν μμ
μ΄ μμλλ©΄ κ·Έ μμ
μ΄ μλ£λ λκΉμ§ λ€μ μμ
μ λκΈ°νλ€.
μ¦, μμ
μ΄ μ°¨λ‘λλ‘ μ€νλλ©°, ν μμ
μ΄ λλ λκΉμ§ λ€μ μμ
μ΄ κΈ°λ€λ¦¬κ² λλ€.
μ΄λ κ² λλ©΄ μμ
λ€μ΄ μμ°¨μ μΌλ‘ μ€νλλ―λ‘ μμκ° μ€μν κ²½μ°μ μ¬μ©λλ€!
μ¦ λκΈ°λ μ΄λ€ λμμ΄ λλλ κ²μ ‘κΈ°λ€λ¦¬λ κ²’ μ΄λ€.
μ°λ¦¬λ μ§κΈκΉμ§ μ½λλ₯Ό μμ±νλ©΄ μμμλΆν° νμ€μ© μμλλ‘ μ€νμ΄ λμκ³
μ¬μ€μ ‘맀 lineμ΄ μ€νλλ κ²μ κΈ°λ€λ¦¬κ³ λ€μ lineμ΄ μ€νλκ³ ’ λ₯Ό λ°λ³΅νκ³ μμλ€.
λκΈ° μ¬μ© μ μ£Όμν μ !
- λ©μΈμμ λ€λ₯Έ νλ‘ λ³΄λΌ λλ sync μ¬μ© κΈμ§!
- → λ©μΈ μ°λ λλ UI μμ μ ν΄μΌνλλ° μ λ°μ΄νΈκ° λλ λκΉμ§ κΈ°λ€λ¦¬κ² λλ©΄ νλ©΄ λμ μ€λ₯ λ°μ κ°λ₯μ± μμ
- νμ¬μ κ°μ νμ sync μμ
보λ΄κΈ° κΈμ§!
- → κ°μ νμ λκΈ°μ μΌλ‘ μμ μ 보λ΄λ©΄ λ°λλ½ λ°μ
- λ©μΈ μ°λ λμμ DispatchQueue.main.sync μ¬μ© κΈμ§
- → μμ κ°μ μ΄μ
2. λΉλκΈ° (Asynchronous)
λΉλκΈ°λ μμ°¨μ μΌλ‘ κΈ°λ€λ¦¬μ§ μκ³ , μ¬λ¬ μμ μ΄ λμμ μ§νλλ κ²μ μλ―Ένλ€.
λκΈ°μ λ°λλ‘ ν μμ μ΄ μμλλλΌλ κ²°κ³Όλ₯Ό κΈ°λ€λ¦¬μ§ μκ³ λ€μ μμ μ΄ μμλ μ μλ€.
λΉλκΈ° μμ μ λνμ μΌλ‘ λ€νΈμν¬ μμ²(μλ²μμ ν΅μ ), νμΌ μ μΆλ ₯, μ¬μ©μ μ λ ₯ λκΈ° λ±κ³Ό κ΄λ ¨μ΄ μλ€.
λΉλκΈ°μ μΈ μμ μ μ¬μ©νλ©΄ μ¬λ¬ μμ μ΄ λμμ μ²λ¦¬λκΈ°μ μμ€ν μμμ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ€!
λν λλλ μκ°μ ν΄λ‘μ λ₯Ό ν΅ν΄ ν΄λΉ μμ μ μ μ μλ€! → completion (μμ μ΄ λλ¬μμ μ리λ ν΄λ‘μ )
μ¦, λκΈ°μλ λ°λλ‘ μ΄λ€ λμμ΄ λλλ κ²μ κΈ°λ€λ¦¬μ§ μλλ€. κ·Έλμ νμ¬ μ§νμ€μΈ μ€λ λμμ λ°λ‘ λ€μ λμ(λ€μ line)μ μ€ννλ€.
μ΄μ μμ μ κΈ°λ€λ¦¬μ§ μκΈ° λλ¬Έμ ‘μκ°μ΄ μ μ½λλ€’ λΌλ κ°μ₯ ν° μ₯μ μ΄ μλ€.
Serial vs Concurrent
μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ λ κ°μ§ μ νμ DispatchQueueκ° μ¬μ©λλ€.
- Serial Queue (μ§λ ¬ ν)
- Concurrent Queue (λ³λ ¬ ν)
λ΄μ©μ μ΄μ΄μ μμ보μ.
1. Serial Queue (μ§λ ¬ ν)
μμ μ μμ°¨μ μΌλ‘ μ€ννλ Queueμ΄λ€.
ν λ²μ νλμ μμ λ§ μ€νλλ©°, μ΄μ μμ μ΄ μλ£λ νμ λ€μ μμ μ΄ μ€νλλ€.
νλ²μ νλμ μμ λ§ μ€ννλ νμ΄λ€. λλ¬Έμ λ€μ΄μ¨ μμμ μλ£λ μμκ° λκ°λ€λ νΉμ§μ΄ μλ€.
- Queueμ μμΈ task λ€μ λ€λ₯Έ νλμ μ€λ λμ λͺ°μλ£μ
- taskμ μμκ³Ό μ’ λ£μ λν μμμμΈ‘μ΄ κ°λ₯
- μΈμ μ¬μ©? π μμκ° μ€μν μμ λ€μ μ²λ¦¬ν λ
2. Concurrent Queue (λ³λ ¬ ν)
μ¬λ¬ μμ μ λμμ μ€νν μ μλ Queueμ΄λ€.
λ³λ ¬ νλ μ¬λ¬ μμ μ λμμ μμνκ³ , μμ€ν μμκ³Ό μν©μ λ°λΌ λμμ μ€νλλ€.
λμμ μ¬λ¬ μμ μ νκΈ° μν΄μλ μ¬λ¬ μ€λ λκ° νμνκ² λλ€.
λν κ°κ° μμ μ 걸리λ μκ°μ΄ λμΌνμ§ μκΈ° λλ¬Έμ μμ μ΄ λ€μ΄μ¨ μμμ μλ£λ μμκ° μΌμΉνμ§ μλλ€λ νΉμ§μ΄ μλ€.
- λ€λ₯Έ μ¬λ¬κ°μ μ€λ λμ λλ μ μ²λ¦¬νλ ν
- taskμ μμκ³Ό μ’ λ£μ λν μμμμΈ‘μ΄ λΆκ°λ₯
- μΈμ μ¬μ©? π μμκ° μ€μνμ§ μκ³ λΉ λ₯΄κ² μ²λ¦¬ν λ
3. Serial Queue vs Concurrent Queue
Serial Queue | Concurrent Queue | |
μ€ννλ μ°λ λ | 1κ°κ° λͺ°μμ | μ¬λ¬κ°κ° λλ μ |
λͺ¨λ μΌμ΄ λλλ μκ° | μ€λ κ±Έλ¦Ό | λΉ λ¦ |
μΌμ μμ | λ€μ΄μ¨ μμ == λλλ μμ | λ€μ΄μ¨ μμ ≠ λλλ μμ |
DispatchQueue | DispatchQueue.main | DispatchQueue.global() |
'Devlogπ©π»βπ» > iOS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS/Xcode] CodeBase & SnapKit μ°μ΅νκΈ°, Storyboard μμ μΈν (2) | 2024.05.04 |
---|---|
[iOS] Content Hugging Priorityμ Content Compression Resistance Priority (4) | 2024.05.03 |
[iOS] CoreData ꡬμ±ν μμ보기 (2) | 2024.04.22 |
[iOS] ScrollView μ¬μ©νκΈ° (2) | 2024.04.22 |
[iOS] CocoaPods λΌμ΄λΈλ¬λ¦¬ μ€μΉ ν μ¬μ©νκΈ°(Alamofire, Kingfisher) (6) | 2024.04.12 |