[Rust] νΈλ μ
μμ μ μΌλκ² λ무 νμ ν΄μ λ€μ μ 리νλ€.
νΈλ μμ μΌμ’
μ μΈν°νμ΄μ€λ‘, μ μλμ§ μμ λ©μλμ μ μΈλ€μ κ°μ§ μ μλ€.
νΈλ μμ μ μΈμ μλμ ꡬ쑰λ₯Ό κ°μ§λ€.
trait** νΈλ μλͺ
**
{ ...μ μΈλ€... }
κ·Έλ¦¬κ³ νΈλ μλ€μ impl ν€μλλ₯Ό ν΅ν΄μ ꡬ쑰체(ν΄λμ€)μ ꡬνλλ€.
impl** νΈλ μλͺ
for ꡬ쑰체λͺ
**
{ ...ꡬνλ€... }
μλ μ½λλ μ μ λ©μλλ§μ κ°μ§λ κ°λ¨ν νΈλ μμ λ§λ€μ΄λμ κ²μ΄λ€.


λΉμ°ν λμ λ©μλλ μ¬μ© κ°λ₯νλ€.


νΈλ μ λ§€κ°λ³μ
νΈλ μλ νμ
μ΄λ―λ‘, νΈλ μμ λ§€κ°λ³μμ νμ
μΌλ‘ μ§μ ν μ μλ€.
λμ , νμ
λͺ
μμ impl λ±μ λΆμ¬μ€μΌ νλ€.


μ°Έμ‘°νμΌλ‘ λ°κΎΈλ©΄ μ΄λ κ² λλ€. implλ νμ
νκΈ°μ ννμΌλ‘ μ·¨κΈλκΈ° λλ¬Έμ, κ·Έ μμ & λ±μ λΆμΈλ€.

κ·Έλ¦¬κ³ implμ΄ λΆμ λ§€κ°λ³μλ κ±°μ νμ μ μ λμ€ν¨μΉμ λμμ΄ λλ€. λ°νμμ΄ μλλΌ, μ»΄νμΌνμμ λ³νμ΄ μ΄λ€μ§λ€λ κ²μ΄λ€.
λλ¬Έμ μ΄λ° μν©μλ μλ¬λ₯Ό λμ§λ€.
νΈλ μ νμ
μΈ &Fooλ‘ μ
μΊμ€ν
ν΄μ 보λμΌλ, ν¨μ μ
μ₯μμ μ΄κ±Έ vtable μ κ·Ό μμ΄ μ€μ κ°μ²΄λ₯Ό μΆμ ν μκ° μλ κ²μ΄λ€.

μ΄λ΄λλ κ·Έλ₯ λ°νμ μΆλ‘ μ μ¨μΌνλ€.
λ°νμ μΆλ‘ μ΄ νμν μ°Έμ‘°νμ΄λ ν¬μΈν°μΈ κ²½μ°μλ, impl λμ dynμ μΈ μ μλ€.
κ·ΈλΌ vtableμ μΆμ ν΄μ μμμ μ²λ¦¬ν΄μ€λ€.

impl νΈλ μμ μ μ λμ€ν¨μΉ, dyn νΈλ μμ λμ λμ€ν¨μΉμ©μΌλ‘ ꡬλΆλ κ²μ΄λ€.
μ°Έκ³ λ‘, νΈλ μλͺ
λ§ μ¨λλ건 dynκ³Ό λμΌνκ² λμνλ€.

κΆμ₯λμ§ μλλ€. dynμ κΌ¬λ°κΌ¬λ° λΆμ¬μ£Όμ
νΈλ μ μμ
νΈλ μμ μμλ λλ€.
κ·Έλ₯ νΈλ μλͺ
μμ μ½λ‘ μ°κ³ μμν νΈλ μμ μ§μ νλ©΄ λλ€.

κ·Όλ° μκ°λ³΄λ€ νΈλ¦¬νμ§ μλ€. Barκ° Fooλ₯Ό μμλ°μμμλ, Bar impl ꡬ문μ Foo ꡬνμ μ§μ΄λ£μ μκ° μλ€...
κ·Έλμ μμ μ½λμμλ Fooλ₯Ό λ°λ‘ ꡬννλ€. μ λ κ² ν κ²½μ°μ μ΄μ μ, Fooλ₯Ό implνμ§ μμΌλ©΄ μλ¬λ₯Ό λμ Έμ 체ν¬λ₯Ό ν΄μ£Όλκ² λΏμ΄λ€.
νΈλ μ μ»΄ν¬μ§μ
λ€μ€μμλ λλ€. +λ‘ νΈλ μμ μ΄μ΄λΆμ΄λ©΄ λλ€.


μ΄μΈμλ 2κ° μ΄μμ νΈλ μμ 쑰건μΌλ‘ λΆμ¬ν λλ +λ‘ λΆμ¬μ νκΈ°νλ€.
μλ μ½λλ λ§€κ°λ³μ νμ
μ νΈλ μμ 2κ° μ΄μ κ²Ήμ³λμ κ²μ΄λ€.

κ·Έλ λ€.