도형 넓이 계산기
Coddy Rust 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 61번째.
챌린지
쉬움이 마지막 챌린지는 트레이트(traits), 트레이트 객체(trait objects), 그리고 다형성(polymorphism)을 결합하여 하나의 컬렉션에 저장된 다양한 도형의 총 면적을 계산하는 실질적인 문제를 해결합니다.
트레이트 객체와 다형성의 강력함을 보여주는 도형 면적 계산기를 만들어 봅시다! 원과 정사각형과 같은 서로 다른 도형들을 하나의 컬렉션에 함께 저장하고, 통일된 인터페이스를 통해 총 면적을 계산하는 시스템을 구축하게 됩니다.
코드는 다음 세 개의 파일로 구성됩니다:
shape.rs:f64를 반환하는area메서드를 가진Shape트레이트를 정의합니다. 이 트레이트는 모든 도형이 충족해야 하는 계약을 설정합니다.shapes.rs: 트레이트를 구현하는 두 개의 구조체를 생성합니다.Circle은radius(f64)를 가지며,Square는side(f64)를 가집니다. 각 구조체는 적절한 면적 공식을 사용하여Shape트레이트를 구현해야 합니다. 원의 경우 π 값으로3.14159를 사용하세요.main.rs: 두 모듈을 모두 가져오고,Vec<Box<dyn Shape>>를 인자로 받아 모든 면적의 합을 반환하는total_area함수를 만듭니다. 제공된 입력을 사용하여 원과 정사각형을 생성하고, 이를 트레이트 객체 벡터에 저장한 다음, 총 면적을 계산하여 결과를 출력하세요.
면적 공식은 다음과 같습니다:
- 원:
3.14159 × radius × radius - 정사각형:
side × side
출력은 모든 도형의 총 면적을 표시해야 합니다:
Total area: {total}예를 들어, 입력값이 2.0 (원의 반지름)과 3.0 (정사각형의 한 변)인 경우:
Total area: 21.56636계산 과정: 원의 면적 = 3.14159 × 2² = 12.56636, 정사각형의 면적 = 3² = 9, 합계 = 21.56636
입력값이 1.0과 4.0인 경우:
Total area: 19.14159두 개의 입력을 받게 됩니다: 원의 반지름과 정사각형의 한 변의 길이 (둘 다 f64로 파싱하세요).
직접 해보기
mod shape;
mod shapes;
use shape::Shape;
use shapes::{Circle, Square};
// TODO: total_area 함수를 구현하세요
// 이 함수는 Vec<Box<dyn Shape>>를 인자로 받아 모든 면적의 합을 f64로 반환해야 합니다
fn total_area(shapes: Vec<Box<dyn Shape>>) -> f64 {
// TODO: 모든 도형 면적의 합을 계산하여 반환하세요
0.0
}
fn main() {
let mut input1 = String::new();
std::io::stdin().read_line(&mut input1).expect("Failed to read line");
let radius: f64 = input1.trim().parse().expect("Invalid number");
let mut input2 = String::new();
std::io::stdin().read_line(&mut input2).expect("Failed to read line");
let side: f64 = input2.trim().parse().expect("Invalid number");
// TODO: 주어진 반지름(radius)으로 Circle을 생성하세요
// TODO: 주어진 변의 길이(side)로 Square를 생성하세요
// TODO: 두 도형을 Vec<Box<dyn Shape>>에 저장하세요
// TODO: total_area를 호출하고 그 결과를 "Total area: {total}" 형식으로 출력하세요
}