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

Method Dispatch

by yongmin.Lee 2021. 12. 6.

 

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

 

 

 

μ°Έκ³ 

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

Non-Escaping Closure 와 Escaping Closure  (0) 2021.12.28
μ ‘κ·Όμ œμ–΄, Access control  (0) 2021.12.28
KVO, Key-Value Observing  (0) 2021.12.06
Swift - κ³ μ°¨ν•¨μˆ˜, Higher-order function  (0) 2021.02.10
Swift19 - μ΅μŠ€ν…μ…˜  (0) 2021.02.10