[rust] Rust 언어의 상속과 다형성

Rust 언어는 전통적인 객체 지향 프로그래밍 언어와는 다른 방식으로 상속과 다형성을 다룹니다. 이 포스트에서는 Rust에서 사용되는 상속과 다형성의 개념과 구현 방법에 대해 알아보겠습니다.

목차

상속

Rust는 기본적으로 상속을 지원하지 않습니다. 대신에 컴포지션(composition)을 통해 코드의 재사용을 지원합니다. 이는 구조체나 특성(traits)을 사용하여 다른 타입을 내포함으로써 코드를 구조화하고 재사용성을 높일 수 있습니다.

구조체 내에 다른 구조체를 포함시키는 방식은 컴포지션이라고 불립니다. Rust의 구조체는 다른 타입을 내포하여 상속과 유사한 효과를 낼 수 있습니다.

다형성

다형성은 일반적으로 같은 인터페이스를 공유하는 서로 다른 타입의 객체를 처리하는 기능을 말합니다. Rust에서는 제네릭(Generics)을 사용하여 다형성을 구현할 수 있습니다. 제네릭을 사용하면 여러 타입에서 동일한 코드를 재사용할 수 있으며, 코드의 유연성과 확장성을 높일 수 있습니다.

Trait을 이용한 다형성 구현

Rust에서는 trait을 이용하여 다형성을 구현할 수 있습니다. trait은 특정 행위를 정의하는 데 사용되며, 해당 특성을 구현한 타입들은 동일한 메서드를 가질 수 있습니다. 이를 통해 각 타입에 대해 다양한 동작을 수행할 수 있습니다.

다음은 trait으로 다형성을 구현하는 간단한 예제입니다.

trait Shape {
    fn area(&self) -> f64;
}

struct Circle {
    radius: f64,
}

impl Shape for Circle {
    fn area(&self) -> f64 {
        std::f64::consts::PI * self.radius * self.radius
    }
}

struct Square {
    side: f64,
}

impl Shape for Square {
    fn area(&self) -> f64 {
        self.side * self.side
    }
}

fn print_area(shape: &dyn Shape) {
    println!("The area is: {}", shape.area());
}

fn main() {
    let circle = Circle { radius: 2.0 };
    let square = Square { side: 3.0 };

    print_area(&circle);
    print_area(&square);
}

이 예제에서는 Shape 트레이트를 정의하고, CircleSquare 구조체가 해당 트레이트를 구현합니다. print_area 함수는 Shape 트레이트를 구현한 어떤 타입도 인자로 받을 수 있으므로, 다형성을 구현한 것입니다.

참고 자료

이상으로 Rust 언어의 상속과 다형성에 대해 알아보았습니다. Rust의 고유한 접근 방식을 통해 안전하고 효율적인 상속과 다형성을 구현할 수 있음을 알 수 있습니다. 계속해서 Rust를 학습하고 적용해보시기를 권장합니다.