Skip to content

Latest commit

Β 

History

History
68 lines (36 loc) Β· 2.96 KB

3. Reducing Dynamic Dispatch.md

File metadata and controls

68 lines (36 loc) Β· 2.96 KB

3. Reducing Dynamic Dispatch

  • Swiftμ—μ„œλŠ” ν•„μš”ν•  λ•Œ λŸ°νƒ€μž„ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜κ³  μžˆλ‹€.
  1. Method Dispatch

    • Dispatch: ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–€ 연산을 톡해 μ–΄λ–»κ²Œ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•  지 μ •ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜
    • μ½”λ“œ 싀행에 λŒ€ν•œ κ²°μ •: μ»΄νŒŒμΌνƒ€μž„ OR λŸ°ν‹°μž„ ?
  2. Static Dispatch(정적, Direct Call)

    • 이미 μ •ν•΄μ Έ 있음.

    • 컴파일 νƒ€μž„μ— ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜κ°€ 무엇인지 κ²°μ •, λŸ°νƒ€μž„μ—λŠ” κ·Έ ν•¨μˆ˜κ°€ κ·ΈλŒ€λ‘œ μ‹€ν–‰

      πŸ‘‰ λŸ°νƒ€μž„μ—μ„œ νŒλ‹¨ν•  ν•„μš” μ—†κΈ° λ•Œλ¬Έμ— μ„±λŠ₯ 상 이점 O

    • κ°’ νƒ€μž…(struct, enum), μ°Έμ‘° νƒ€μž…(class) λͺ¨λ‘ 지원

    • struct, enum: 기본적으둜 Static Dispatch

      βœ”οΈŽ κ°’ νƒ€μž…(Value type)이기 λ•Œλ¬Έμ— 상속을 ν•  수 X ☞ μ˜€λ²„λΌμ΄λ”© κ°€λŠ₯μ„± X πŸ‘‰ Static Dispatch

      βœ”οΈŽ extension: μ—¬μ „νžˆ μƒμ†μ˜ κ°€λŠ₯μ„± X ☞ μ˜€λ²„λΌμ΄λ”© κ°€λŠ₯μ„± X πŸ‘‰ Static Dispatch

  3. 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λ₯Ό λΆ™μ—¬μ£Όλ©΄ μ˜€λ²„λΌμ΄λ”© κ°€λŠ₯)

πŸ”– μ°Έκ³