본문 바로가기
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
BIG

'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

댓글