Menu
Coddy logo textTech

복습 - 동물원 관리자

Coddy Rust 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 48번째.

challenge icon

챌린지

쉬움

지금까지 배운 트레이트 객체(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!"를 반환해야 합니다.
  • 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를 순회하며 각 동물의 소리를 출력하세요
}

Object Oriented Programming의 모든 레슨