TIL89 ✨

YaR LabΒ·2023λ…„ 8μ›” 26일
0

TIL✨

λͺ©λ‘ 보기
77/135
post-thumbnail

πŸ—“οΈ23.08.24

정적 λ””μŠ€νŒ¨μΉ˜μ™€ 정적 λ””μŠ€νŒ¨μΉ˜μ— λŒ€ν•œ 이해

πŸ“Œ ν”„λ‘œμ„ΈμŠ€

  • ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λŠ” 싀행쀑인 ν”„λ‘œκ·Έλž¨μ˜ ν•œ λ‹¨μœ„

πŸ“Œ λ‹€ν˜•μ„± Polymorphism

  • ν•˜λ‚˜μ˜ 이름(λ˜λŠ” κΈ°λŠ₯)으둜 μ—¬λŸ¬ 가지 일을 ν•  수 μžˆλŠ” λŠ₯λ ₯
  • ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€(=ν”„λ‘œν† μ½œ)λ₯Ό μ±„νƒν•œ νƒ€μž…μ΄ λ‹€μ–‘ν•˜κ²Œ κ΅¬ν˜„λ  수 있음
  • OCP(Open/Closed Principle)λ₯Ό λ§Œμ‘±ν•¨
  • λΆ€λͺ¨ 클래슀λ₯Ό μƒμ†λ°›μ•„μ„œ μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•˜λŠ” κ²½μš°λ„ 해당됨

πŸ“Œ Dispatch

  • OS적 κ΄€μ μ—μ„œ λ³Ό λ•Œ 운영체제의 μŠ€μΌ€μ€„λŸ¬κ°€ μ‹€ν–‰ν•  ν”„λ‘œμ„ΈμŠ€λ₯Ό μ„ νƒν•˜κ³  ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€λ₯Ό CPU에 ν• λ‹Ήν•˜λŠ” 과정이라고 λ³Ό 수 있음
  • "λ°°μ • ν•˜λ‹€" λΌλŠ” λœ»μ„ 가짐
  • λ‹€ν˜•μ„±μ˜ κ΄€μ μ—μ„œ λ³Ό λ•Œ ν•˜λ‚˜μ˜ ν•¨μˆ˜ 호좜이 μ„œλ‘œ λ‹€λ₯Έ ν•¨μˆ˜ κ΅¬ν˜„ 쀑 μ–΄λ–€ 것을 싀행할지 κ²°μ •ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜

πŸ“Œ 가상 λ©”μ„œλ“œ Virtual Method

  • λΆ€λͺ¨ 클래슀 λ˜λŠ” 슈퍼 ν΄λž˜μŠ€μ—μ„œ μ •μ˜
  • λ©”μ„œλ“œμ— λŒ€ν•œ κΈ°λ³Έ λ™μž‘μ΄ λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„λ¨
  • μžμ‹ 클래슀 λ˜λŠ” μ„œλΈŒ ν΄λž˜μŠ€μ—μ„œλŠ” 이 가상 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•  수 있음

πŸ“Œ 정적 바인딩

  • 컴파일 μ‹œκ°„μ— λ³€μˆ˜λ‚˜ ν•¨μˆ˜ 호좜 λŒ€μƒμ„ κ²°μ •ν•˜κ³ , μ»΄νŒŒμΌλŸ¬κ°€ μ½”λ“œλ₯Ό 생성할 λ•Œ ν•΄λ‹Ή 바인딩을 κ³ μ •μ‹œν‚΄
  • μ‹€ν–‰ μ‹œκ°„μ— 바인딩 정보λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©°, ν•¨μˆ˜λ‚˜ λ³€μˆ˜κ°€ 호좜될 λ•Œ 항상 λ™μΌν•œ λŒ€μƒμ„ κ°€λ¦¬ν‚€κ²Œ ν•˜λŠ”κ²ƒ
  • ν˜ΈμΆœλŒ€μƒμ„ κ³ μ •ν•˜λŠ” 것

πŸ“Œ 동적 바인딩

  • λŸ°νƒ€μž„ 바인딩이라고도 뢀름
  • μ‹€ν–‰ μ‹œκ°„μ— 객체의 μ‹€μ œ νƒ€μž…μ„ 기반으둜 ν•¨μˆ˜ 호좜 λŒ€μƒμ„ 결정함

πŸ“Œ 인라인 기법

  • ν•¨μˆ˜ ν˜ΈμΆœμ„ ν•΄λ‹Ή ν•¨μˆ˜μ˜ 본문으둜 직접 λŒ€μ²΄ν•˜λŠ” 것
  • ν•¨μˆ˜ ν˜ΈμΆœμ— λ”°λ₯Έ μ˜€λ²„ν—€λ“œκ°€ κ°μ†Œ
  • 정적 바인딩은 호좜 λŒ€μƒμ„ κ³ μ •ν•˜λŠ” 것이고 인라인은 본문을 직접 λŒ€μ²΄ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ μ„œλ‘œ λ‹€λ₯Έ κ°œλ…

πŸ“Œ Static Dispatch

  • 컴파일 μ‹œκ°„μ˜ μ–΄λ–€ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  것인지 κ²°μ •
  • μ»΄νŒŒμΌλŸ¬κ°€ μ½”λ“œλ₯Ό 생성할 λ•Œ 정적 바인딩을 함
  • 컴파일 νƒ€μž„μ— 결정이 λ‚˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯상 이점을 κ°€μ§ˆ 수 있음
  • λŸ°νƒ€μž„μ— 바인딩 정보 λ³€κ²½ν•˜μ§€ μ•ŠμŒ
  • ν•¨μˆ˜ μ˜€λ²„λ‘œλ”©μ€ 정적 λ””μŠ€νŒ¨μΉ˜ μ˜ˆμ‹œ

πŸ“Œ Dynamic Dispatch

  • λŸ°νƒ€μž„μ— μ–΄λ–€ λ©”μ„œλ“œλ₯Ό 호좜 ν•  지 κ²°μ •ν•˜λŠ” 것
  • swiftμ—μ„œλŠ” ν΄λž˜μŠ€λ§ˆλ‹€ ν•¨μˆ˜ ν¬μΈν„°λ“€μ˜ 배열인 vTable(Virtual Method Table)μ΄λΌλŠ” 것을 μœ μ§€
  • λŸ°νƒ€μž„ μ‹œμ μ— ν•¨μˆ˜λ₯Ό κ²°μ •ν•΄μ„œ μ„±λŠ₯상 손해가 있음

0개의 λŒ“κΈ€