Programming/Rust
Rust trait - 인터페이스?, 추상클래스?
Chan_찬
2023. 3. 14. 09:58
반응형
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() 메서드를 사용하여 각 객체의 소리를 출력할 수 있습니다.
728x90
반응형
BIG