복습 - 동물원 관리자
Coddy Rust 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 48번째.
챌린지
쉬움지금까지 배운 트레이트 객체(trait object) 개념을 모두 활용하여 동물원 관리 시스템을 만들어 봅시다! 서로 다른 소리를 내는 다양한 동물들을 하나의 컬렉션에 저장하고, 하나씩 차례대로 소리를 내게 하는 시스템을 구축하게 됩니다.
코드는 두 개의 파일로 구성됩니다:
animals.rs:&self를 매개변수로 받고String을 반환하는speak메서드를 가진 공개(public)Speak트레이트를 정의하세요. 그런 다음 각각 공개name필드(String)를 가진 세 개의 공개 구조체Dog,Cat,Bird를 만드세요. 각 동물에 대해 고유한 소리를 내도록Speak트레이트를 구현하세요:- Dog는
"{name} says: Woof!"를 반환해야 합니다. - Cat은
"{name} says: Meow!"를 반환해야 합니다. - Bird는
"{name} says: Tweet!"를 반환해야 합니다.
- Dog는
main.rs: animals 모듈을 가져와서 동물원을 만드세요! 제공된 입력을 사용하여 각 동물 유형을 하나씩 포함하는Vec<Box<dyn Speak>>를 생성하세요. Dog, Cat, Bird 순서대로 추가해야 합니다. 마지막으로, 동물원을 순회하며 각 동물의 소리를 한 줄씩 출력하세요.
이 챌린지는 트레이트 객체의 진정한 강력함을 보여줍니다. 서로 다른 세 가지 동물 유형이 하나의 컬렉션에 함께 저장되고, 각각 동일한 speak() 호출에 대해 자신만의 고유한 동작으로 응답합니다.
출력은 각 동물이 말하는 순서대로 표시되어야 합니다:
{dog_name} says: Woof!
{cat_name} says: Meow!
{bird_name} says: Tweet!예를 들어, 입력값이 Rex, Whiskers, Tweety인 경우:
Rex says: Woof!
Whiskers says: Meow!
Tweety says: Tweet!개 이름, 고양이 이름, 새 이름 순으로 세 개의 입력을 받게 됩니다.
직접 해보기
mod animals;
use animals::{Speak, Dog, Cat, Bird};
fn main() {
// 동물 이름을 입력받습니다
let mut dog_name = String::new();
std::io::stdin().read_line(&mut dog_name).expect("Failed to read line");
let dog_name = dog_name.trim().to_string();
let mut cat_name = String::new();
std::io::stdin().read_line(&mut cat_name).expect("Failed to read line");
let cat_name = cat_name.trim().to_string();
let mut bird_name = String::new();
std::io::stdin().read_line(&mut bird_name).expect("Failed to read line");
let bird_name = bird_name.trim().to_string();
// TODO: zoo라는 이름의 Vec<Box<dyn Speak>>를 생성하세요
// 순서대로 동물을 추가하세요: Dog가 먼저, 그다음 Cat, 그다음 Bird
// TODO: zoo를 순회하며 각 동물의 소리를 출력하세요
}