- Swiftμμλ νμν λ λ°νμ μ±λ₯μ ν₯μμν¬ μ μλ κΈ°λ₯μ μ 곡νκ³ μλ€.
-
Method Dispatch
Dispatch
: νλ‘κ·Έλ¨μ΄ μ΄λ€ μ°μ°μ ν΅ν΄ μ΄λ»κ² ν΄λΉ λ©μλλ₯Ό μ€νν μ§ μ νλ λ©μ»€λμ¦- μ½λ μ€νμ λν κ²°μ : μ»΄νμΌνμ OR λ°ν°μ ?
-
Static Dispatch(μ μ , Direct Call)
-
μ΄λ―Έ μ ν΄μ Έ μμ.
-
μ»΄νμΌ νμμ νΈμΆλλ ν¨μκ° λ¬΄μμΈμ§ κ²°μ , λ°νμμλ κ·Έ ν¨μκ° κ·Έλλ‘ μ€ν
π λ°νμμμ νλ¨ν νμ μκΈ° λλ¬Έμ μ±λ₯ μ μ΄μ O
-
κ° νμ (struct, enum), μ°Έμ‘° νμ (class) λͺ¨λ μ§μ
-
struct, enum: κΈ°λ³Έμ μΌλ‘ Static Dispatch
βοΈ κ° νμ (Value type)μ΄κΈ° λλ¬Έμ μμμ ν μ X β μ€λ²λΌμ΄λ© κ°λ₯μ± X π Static Dispatch
βοΈ extension: μ¬μ ν μμμ κ°λ₯μ± X β μ€λ²λΌμ΄λ© κ°λ₯μ± X π Static Dispatch
-
-
Dynamic Dispatch(λμ , Indirect Call)
-
λ°νμ μμ μ κ²°μ
π λ°νμμμ μ΄λ€ λ©μλκ° μ€νλλ μ§ κ²°μ λκΈ° λλ¬Έμ μ±λ₯ μ μ€λ²ν€λ λ°μ
-
ν΄λμ€λ₯Ό μμλ°μ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μ νμ¬ μ¬μ©ν λ, μ΄λ€ λ©μλκ° μ€νλλμ§ λ°νμμμ κ²°μ λλ€.
β κ°κ°μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό κ°μ§κ³ μλ ν¨μ ν¬μΈν°λ€μ λ°°μ΄μΈ vTable(Virtual Dispatch Table)μ μ°Έμ‘°νμ¬ μ€μ νΈμΆν ν¨μλ₯Ό κ²°μ
π μ»΄νμΌ νμμ μ΄λ€ λ©μλκ° μ€νλλ μ§ κ²°μ νμ§ λͺ»νλ μ΄μ λ μ€λ²λΌμ΄λ© λλ¬Έ
β νμ ν΄λμ€μμ μ€λ²λΌμ΄λ©μ΄ λ μ μλ κ°λ₯μ± O β μ€μ νμΈ μμ μ λ°νμμμ μ§ν
β μ€μ μ€λ²λΌμ΄λ©μ μ¬λΆλ νμΈνμ§ μκ³ , νμ vTableμ μ°Έμ‘°νμ¬ μ€μ νΈμΆν ν¨μ κ²°μ
β βοΈ λ°νμ μμ μ, ν΄λμ€μ vTable μ°Έμ‘° β μ€μ λΆλ¦΄ ν¨μμ ν¬μΈν°μ λ©λͺ¨λ¦¬ μ£Όμ μ½κΈ° β ν΄λΉ μ£Όμλ‘ μ΄λ π μ±λ₯ μ μν΄ O
β π μ€λ²λΌμ΄λ© μ¬λΆλ₯Ό νμΈνμ§ μκ³ , νμ vTable μ°Έμ‘°νλ κ² μ΄μνκ±° μλκ°?
β
final
-
μ°Έμ‘° νμ (class)λ§ μ§μ
-
class: κΈ°λ³Έμ μΌλ‘ Dynamic Dispatch
βοΈ μ°Έμ‘° νμ (Reference type)μ΄κΈ° λλ¬Έμ μμμ κ°λ₯μ± O β μ€λ²λΌμ΄λ© κ°λ₯μ± O π Dynamic Dispatch
βοΈ extension: classλ₯Ό νμ₯extensionνμ¬ λ©μλλ₯Ό μΆκ°ν κ²½μ°, μλΈν΄λμ€μμ μ€λ²λΌμ΄λ© λΆκ°!
β π class extension: μμμ κ°λ₯μ± X β μ€λ²λΌμ΄λ© κ°λ₯μ± X π Static Dispatch
β (@objcλ₯Ό λΆμ¬μ£Όλ©΄ μ€λ²λΌμ΄λ© κ°λ₯)
-
π μ°Έκ³
- SeSAC iOS κ°λ°μ λ°λ· κ³Όμ κ°μ μλ£
- https://babbab2.tistory.com/143
- https://babbab2.tistory.com/144
- https://brunch.co.kr/@joonwonlee/14
- https://babbab2.tistory.com/145