[Rust] νŠΈλ ˆμž‡

μ˜ˆμ „μ— 썼던게 λ„ˆλ¬΄ ν—ˆμ ‘ν•΄μ„œ λ‹€μ‹œ μ •λ¦¬ν•œλ‹€.
νŠΈλ ˆμž‡μ€ μΌμ’…μ˜ μΈν„°νŽ˜μ΄μŠ€λ‘œ, μ •μ˜λ˜μ§€ μ•Šμ€ λ©”μ„œλ“œμ˜ 선언듀을 κ°€μ§ˆ 수 μžˆλ‹€.

νŠΈλ ˆμž‡μ˜ 선언은 μ•„λž˜μ˜ ꡬ쑰λ₯Ό κ°€μ§„λ‹€.
trait** νŠΈλ ˆμž‡λͺ…**
{ ...μ„ μ–Έλ“€... }

그리고 νŠΈλ ˆμž‡λ“€μ€ impl ν‚€μ›Œλ“œλ₯Ό ν†΅ν•΄μ„œ ꡬ쑰체(클래슀)에 κ΅¬ν˜„λœλ‹€.
impl** νŠΈλ ˆμž‡λͺ… for ꡬ쑰체λͺ…**
{ ...κ΅¬ν˜„λ“€... }

μ•„λž˜ μ½”λ“œλŠ” μ •μ λ©”μ„œλ“œλ§Œμ„ κ°€μ§€λŠ” κ°„λ‹¨ν•œ νŠΈλ ˆμž‡μ„ λ§Œλ“€μ–΄λ†“μ€ 것이닀. image

image

λ‹Ήμ—°νžˆ λ™μ λ©”μ„œλ“œλ„ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. image

image


νŠΈλ ˆμž‡ λ§€κ°œλ³€μˆ˜
νŠΈλ ˆμž‡λ„ νƒ€μž…μ΄λ―€λ‘œ, νŠΈλ ˆμž‡μ„ λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μœΌλ‘œ μ§€μ •ν•  수 μžˆλ‹€.
λŒ€μ‹ , νƒ€μž…λͺ… μ•žμ— impl 등을 λΆ™μ—¬μ€˜μ•Ό ν•œλ‹€. image

image

μ°Έμ‘°ν˜•μœΌλ‘œ λ°”κΎΈλ©΄ μ΄λ ‡κ²Œ λœλ‹€. impl도 νƒ€μž…ν‘œκΈ°μ˜ ν‘œν˜„μœΌλ‘œ μ·¨κΈ‰λ˜κΈ° λ•Œλ¬Έμ—, κ·Έ μ•žμ— & 등을 뢙인닀. image

image 그리고 impl이 뢙은 λ§€κ°œλ³€μˆ˜λŠ” 거의 항상 정적 λ””μŠ€νŒ¨μΉ˜μ˜ λŒ€μƒμ΄ λœλ‹€. λŸ°νƒ€μž„μ΄ μ•„λ‹ˆλΌ, μ»΄νŒŒμΌνƒ€μž„μ— λ³€ν™˜μ΄ μ΄λ€„μ§„λ‹€λŠ” 것이닀.

λ•Œλ¬Έμ— 이런 μƒν™©μ—λŠ” μ—λŸ¬λ₯Ό λ˜μ§„λ‹€.
νŠΈλ ˆμž‡ νƒ€μž…μΈ &Foo둜 μ—…μΊμŠ€νŒ…ν•΄μ„œ λ³΄λƒˆμœΌλ‹ˆ, ν•¨μˆ˜ μž…μž₯에선 이걸 vtable μ ‘κ·Ό 없이 μ‹€μ œ 객체λ₯Ό 좔적할 μˆ˜κ°€ μ—†λŠ” 것이닀. image

image μ΄λŸ΄λ•ŒλŠ” κ·Έλƒ₯ λŸ°νƒ€μž„ 좔둠을 μ¨μ•Όν•œλ‹€.

λŸ°νƒ€μž„ 좔둠이 ν•„μš”ν•œ μ°Έμ‘°ν˜•μ΄λ‚˜ 포인터인 κ²½μš°μ—λŠ”, impl λŒ€μ‹  dyn을 μ“Έ 수 μžˆλ‹€.
그럼 vtable을 μΆ”μ ν•΄μ„œ μ•Œμ•„μ„œ μ²˜λ¦¬ν•΄μ€€λ‹€. image

image impl νŠΈλ ˆμž‡μ€ 정적 λ””μŠ€νŒ¨μΉ˜, dyn νŠΈλ ˆμž‡μ€ 동적 λ””μŠ€νŒ¨μΉ˜μš©μœΌλ‘œ κ΅¬λΆ„λœ 것이닀.

참고둜, νŠΈλ ˆμž‡λͺ…λ§Œ μ¨λ†“λŠ”κ±΄ dynκ³Ό λ™μΌν•˜κ²Œ λ™μž‘ν•œλ‹€. image

image ꢌμž₯λ˜μ§„ μ•ŠλŠ”λ‹€. dyn을 κΌ¬λ°•κΌ¬λ°• λΆ™μ—¬μ£Όμž


νŠΈλ ˆμž‡ 상속
νŠΈλ ˆμž‡μ€ 상속도 λœλ‹€.
κ·Έλƒ₯ νŠΈλ ˆμž‡λͺ… μ˜†μ— 콜둠 μ“°κ³  상속할 νŠΈλ ˆμž‡μ„ μ§€μ •ν•˜λ©΄ λœλ‹€. image

image 근데 생각보닀 νŽΈλ¦¬ν•˜μ§„ μ•Šλ‹€. Barκ°€ Fooλ₯Ό μƒμ†λ°›μ•˜μŒμ—λ„, Bar impl ꡬ문에 Foo κ΅¬ν˜„μ„ 집어넣을 μˆ˜κ°€ μ—†λ‹€...

κ·Έλž˜μ„œ μœ„μ˜ μ½”λ“œμ—μ„œλ„ Fooλ₯Ό λ”°λ‘œ κ΅¬ν˜„ν–ˆλ‹€. μ €λ ‡κ²Œ ν•  경우의 이점은, Fooλ₯Ό implν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬λ₯Ό λ˜μ Έμ„œ 체크λ₯Ό ν•΄μ£ΌλŠ”κ²ƒ 뿐이닀.


νŠΈλ ˆμž‡ μ»΄ν¬μ§€μ…˜
닀쀑상속도 λœλ‹€. +둜 νŠΈλ ˆμž‡μ„ 이어뢙이면 λœλ‹€. image

image

이외에도 2개 μ΄μƒμ˜ νŠΈλ ˆμž‡μ„ 쑰건으둜 λΆ€μ—¬ν•  λ•ŒλŠ” +둜 λΆ™μ—¬μ„œ ν‘œκΈ°ν•œλ‹€.
μ•„λž˜ μ½”λ“œλŠ” λ§€κ°œλ³€μˆ˜ νƒ€μž…μ— νŠΈλ ˆμž‡μ„ 2개 이상 겹쳐놓은 것이닀. image

image κ·Έλ ‡λ‹€.