복습 - 동물원 관리자
Coddy Rust 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 48번째.
챌린지
쉬움지금까지 배운 모든 트레이트 객체 개념을 하나로 모으는 동물원 관리자를 만들어 봅시다! 각자 고유한 소리를 내는 다양한 동물들을 하나의 컬렉션에 저장하고, 하나씩 말하게 하는 시스템을 만들게 됩니다.
코드를 두 파일로 나누어 구성합니다:
animals.rs:speak메서드를 포함하며&self를 인수로 받고String을 반환하는 공개Speak트레이트를 정의합니다. 그런 다음 공개 구조체Dog,Cat,Bird를 만들고, 각각 공개name필드(String)를 갖도록 합니다. 각 동물에 대해Speak트레이트를 구현하고, 동물의 특징적인 소리를 지정합니다:- Dog는
{name} says: Woof!를 반환해야 합니다. - Cat은
{name} says: Meow!를 반환해야 합니다. - Bird는
{name} says: Tweet!를 반환해야 합니다.
- Dog는
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 컴파일러