polymorphism: 다형성

객체 지향 프로그래밍(OOP)에서 동일한 인터페이스를 통해 서로 다른 데이터 타입이나 클래스들이 동일하게 동작할 수 있도록 하는 개념.

Haskell: 하스켈

class Eq a where
    (==) :: a -> a -> Bool
    (/=) :: a -> a -> Bool
    
data Color = Red | Green | Blue

instance Eq Color where
    Red == Red = True
    Green == Green = True
    Blue == Blue = True
    _ == _ = False

    x /= y = not (x == y)
  
-- 위 코드에서는 Color라는 타입이 Eq 타입클래스의 인스턴스가 되어, 색깔을 비교할 수 있음.
length :: [a] -> Int
length [] = 0
length (_:xs) = 1 + length xs

{-
재귀적으로 길이를 측정하는 함수 / [Int], [Char], [Bool] 등 어떤 타입의 리스트든 사용 가능
length [1, 2, 3]는 1 + length [2, 3]를 반환함.
length [2, 3]는 1 + length [3]를 반환함.
length [3]는 1 + length []를 반환함.
length []는 0을 반환함.
-}

trait bound: 트레이트 바운드

   /// Given two values, pick whichever one is less.
fn min<T: Ord>(value1: T, value2: T) -> T { if value1 <= value2 {
value1
} else { value2
} }

dyn 키워드: 동적 디스패치

<aside> 💡 동적 디스패치 vs 정적 디스패치 → 러스트는 기본적으로 정적 디스패치를 사용

정적 디스패치 (Static Dispatch):

동적 디스패치 (Dynamic Dispatch)

** 인라인화: 컴파일러 최적화 기법 중 하나로, 함수 호출을 제거하고 함수의 코드를 호출 지점에 직접 삽입하는 것을 의미

오버헤드

오버헤드는 코드가 실행될 때 발생하는 추가 비용을 말한다. 특히, 가상 함수 호출(virtual method call)은 런타임에 실제로 호출할 메서드를 결정해야 하므로, 성능에 영향을 줄 수 있다.