Menu
Coddy logo textTech

복습 - 동물원 관리자

Coddy Rust 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 48번째.

challenge icon

챌린지

쉬움

지금까지 배운 모든 트레이트 객체 개념을 하나로 모으는 동물원 관리자를 만들어 봅시다! 각자 고유한 소리를 내는 다양한 동물들을 하나의 컬렉션에 저장하고, 하나씩 말하게 하는 시스템을 만들게 됩니다.

코드를 두 파일로 나누어 구성합니다:

  • animals.rs: speak 메서드를 포함하며 &self를 인수로 받고 String을 반환하는 공개 Speak 트레이트를 정의합니다. 그런 다음 공개 구조체 Dog, Cat, Bird를 만들고, 각각 공개 name 필드(String)를 갖도록 합니다. 각 동물에 대해 Speak 트레이트를 구현하고, 동물의 특징적인 소리를 지정합니다:
    • Dog는 {name} says: Woof!를 반환해야 합니다.
    • Cat은 {name} says: Meow!를 반환해야 합니다.
    • Bird는 {name} says: Tweet!를 반환해야 합니다.
  • main.rs: 동물 모듈을 가져오고 동물원을 만듭니다! 제공된 입력을 사용하여 각 동물 유형을 하나씩 포함하는 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를 순회하며 각 동물의 소리를 출력
}

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 Rust 컴파일러