iOS π/Swift
Method Dispatch
yongmin.Lee
2021. 12. 6. 20:00
Method Dispatch
νλ‘κ·Έλ¨μ΄ μ΄λ»κ² ν΄λΉ λ©μλλ₯Ό μ€νν μ§ μ νλ κ²
Static Dispatch vs Dynamic Dispatch
1. Static Dispatch
- = Direct Dispatch = Direct Call
- "μ»΄νμΌ νμ"μ νΈμΆλ ν¨μλ₯Ό κ²°μ
- μ»΄νμΌ νμμ κ²°μ μ΄ λκΈ° λλ¬Έμ μ±λ₯μ μ΄μ
- Value TypeμΈ κ΅¬μ‘°μ²΄, μ΄κ±°νμ μμμ ν μ μλ€λ νΉμ§ λλ¬Έμ μ€λ²λΌμ΄λ©μ΄ λ κ°λ₯μ±μ΄ μκ³ , λ°λΌμ Static Dispatchλ₯Ό μ¬μ©
2. Dynamic Dispatch
- = Indirect Call
- "λ°νμ"μ νΈμΆλ ν¨μλ₯Ό κ²°μ νλ€
- Swiftμμλ ν΄λμ€λ§λ€ ν¨μ ν¬μΈν°λ€μ λ°°μ΄μΈ vTable(Virtual Dispatch Table)μ΄λΌλ κ²μ μ μ§
- νμ ν΄λμ€κ° λ©μλλ₯Ό νΈμΆν λ, μ΄ vTable λ₯Ό μ°Έμ‘°νμ¬ μ€μ νΈμΆν ν¨μλ₯Ό κ²°μ
- "λ°νμ"μ μΌμ΄λκΈ° λλ¬Έμ μ±λ₯μ μν΄
- Reference Typeμ Classλ μμμ ν΅ν μ€λ²λΌμ΄λ©μ κ°λ₯μ±μ΄ μμ
-> μλΈ ν΄λμ€μμ ν¨μλ₯Ό νΈμΆν μ μκΈ° λλ¬Έμ λ°νμ μκ°μ μμν΄λμ€μ λ©μλλ₯Ό νΈμΆνλμ§ νμν΄λμ€μ ν¨μλ₯Ό νΈμΆνλμ§ νμΈνλ μμ νμ
-> κ° ν΄λμ€λ§λ€ κ°μ§κ³ μλ vTableμ΄λ κ² μμ ν¨μ ν¬μΈν°λ‘ λκ³ , μ€μ λ°νμ μμ μ μ΄ vTableμ μ¬μ©νμ¬ μ΄λ€ λ©μλκ° λΆλ¦¬λμ§λ₯Ό κ²°μ
-> Dynamic Dispatchλ₯Ό μ¬μ©
-> OOPμμ, μ€λ²λΌμ΄λ©μ νκΈ° μν΄μ Dynamic Dispatchλ νμ - νλ‘ν μ½μκΈ°λ³Έμ μΌλ‘λ©μλμμ μΈλΆλ§μ 곡μ€μ μ¬μ©ν λνλ‘ν μ½νμ
μμ°Έμ‘°λ‘λ§μ¬μ©ν κ²½μ°,ν΄λΉμΈμ€ν΄μ€νμ
μλ§λλ©μλλ₯ΌνΈμΆν΄μΌν΄μ Dynamic Dispatchλ₯Όμ¬μ©
3. μ±λ₯ μ΅μ ν
- μ€λ²λΌμ΄λ©μ κ°λ₯μ± λλ¬Έμ Dynamic Dispatchλ λ°νμ μμ vTableμ μ°Ύμ λ©μλλ₯Ό μ€ννκΈ° λλ¬Έμ μ±λ₯μ μν΄
- μμ κ°λ₯μ±μ΄ μλ ν΄λμ€λ, μ€λ²λΌμ΄λ©μ΄ λμ§ μλ νλ‘νΌν°μ λ©μλμ κ²½μ° Static Dispatchλ‘ λ°κΏμ£Όμ΄ μ±λ₯ μ΅μ ν κ°λ₯
- μμ, μ€λ²λΌμ΄λ© λ νμκ° μλ ν΄λμ€, λ©μλ, νλ‘νΌν°μ final ν€μλλ₯Ό μ¬μ©
- μ κ·Όμ΄ νμ¬ νμΌλ‘ μ νλλ κ²½μ° private ν€μλ λΆμ΄λ©΄ μ»΄νμΌλ¬λ private ν€μλκ° μ°Έμ‘°λ μ μλ κ³³μμ μ€λ²λΌμ΄λ©μ΄ λλμ§ μ λλμ§λ₯Ό νλ¨. -> μ€λ²λΌμ΄λ© λλ κ³³μ΄ μλ€λ©΄ Static Dispathλ‘ λμ
- μ°Έκ³ : https://onemoonstudio.tistory.com/7
μ°Έκ³