본문 바로가기
Programming/Rust

Rust trait - 인터페이스?, 추상클래스?

by Chan_찬 2023. 3. 14.
728x90

Rust trait

Rust에서 Trait은 다른 언어에서 인터페이스나 추상 클래스와 비슷한 역할을 합니다.


Trait은 메서드와 관련된 동작을 정의하며, 구조체, 열거형, 또는 다른 Trait 등과 함께 사용될 수 있습니다.
Trait을 사용하여 코드를 더 모듈화하고, 코드 재사용성을 높이고, 다형성을 제공할 수 있습니다.

다음은 간단한 예제입니다. 이 예제에서는 Trait을 사용하여 구조체가 지정된 Trait에 해당하는 메서드를 구현할 수 있도록합니다.

trait Animal {
    fn name(&self) -> &'static str;
    fn make_sound(&self);
}

struct Dog {
    name: &'static str,
}

struct Cat {
    name: &'static str,
}

impl Animal for Dog {
    fn name(&self) -> &'static str {
        self.name
    }

    fn make_sound(&self) {
        println!("{} says woof!", self.name);
    }
}

impl Animal for Cat {
    fn name(&self) -> &'static str {
        self.name
    }

    fn make_sound(&self) {
        println!("{} says meow!", self.name);
    }
}

fn main() {
    let dog = Dog { name: "Buddy" };
    let cat = Cat { name: "Fluffy" };

    let animals: [&dyn Animal; 2] = [&dog, &cat];

    for animal in &animals {
        animal.make_sound();
    }
}

결과

Buddy says woof!
Fluffy says meow!

위의 코드에서 Animal Trait은 name()과 make_sound() 메서드를 정의합니다. Dog와 Cat 구조체는 이러한 메서드를 구현하여 각 동물이 어떤 소리를 내는지 알려줍니다.
마지막으로, main() 함수에서는 Dog와 Cat 객체를 만들고, 이들을 &dyn Animal Trait으로 캐스팅합니다. 그러면 make_sound() 메서드를 사용하여 각 객체의 소리를 출력할 수 있습니다.

https://doc.rust-lang.org/book/ch10-02-traits.html

728x90
728x90

'Programming > Rust' 카테고리의 다른 글

Rust match  (0) 2023.03.16
Rust 매크로 macro_rules!  (0) 2023.03.15
Rust 의 소유권(ownership)이란?  (0) 2023.03.13
Rust 의 type : Some 에 대해..  (0) 2023.03.10
maturin, PyO3 - Rust 를 Python 에서 사용하자  (0) 2023.03.09
Buy me a coffeeBuy me a coffee

댓글