Menu
Coddy logo textTech

요약 - Shape Enum

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

challenge icon

챌린지

쉬움

서로 다른 도형을 나타내기 위해 열거형(enum)을 사용하고, 각 도형의 치수를 저장하는 기하학 계산기를 만들어 보겠습니다. 여러분이 만들 Shape 열거형은 하나의 타입이 어떻게 서로 다른 데이터 구조를 가질 수 있는지, 그리고 메서드를 통해 어떻게 통일된 동작을 제공할 수 있는지 보여줄 것입니다.

코드를 정리하기 위해 두 개의 파일을 생성합니다:

  • shape.rs: 다음 두 가지 변리언트(variant)를 가진 공개(public) Shape 열거형을 정의합니다:
    • Circle — 반지름을 나타내는 단일 f64 값을 가집니다 (튜플 구문 사용)
    • Rectangle — 이름이 있는 필드인 width (f64)와 height (f64)를 가집니다
    패턴 매칭을 사용하여 변리언트에 따라 올바른 면적을 계산하는 area 메서드를 구현하세요. 원의 경우 π 값으로 3.14159를 사용하세요.
  • main.rs: shape 모듈을 가져와서, 제공된 입력을 사용하여 각 도형 변리언트의 인스턴스를 하나씩 생성하고 각 도형의 면적을 출력합니다.

area 메서드는 f64를 반환해야 합니다. 매칭할 때 각 변리언트를 구조 분해(destructure)하여 치수를 추출하고 적절한 공식을 적용하세요:

  • 원의 면적: π × radius²
  • 직사각형의 면적: width × height

출력은 각 도형의 면적을 개별 줄에 표시해야 하며, 소수점 첫째 자리까지 출력해야 합니다:

Circle area: {area}
Rectangle area: {area}

예를 들어, 원의 반지름이 5.0이고 직사각형의 너비가 4.0, 높이가 6.0인 경우 출력은 다음과 같습니다:

Circle area: 78.5
Rectangle area: 24.0

세 개의 입력을 받게 됩니다: 원의 반지름, 직사각형의 너비, 그리고 직사각형의 높이입니다.

직접 해보기

mod shape;

use shape::Shape;

fn main() {
    // 입력 읽기
    let mut radius_input = String::new();
    std::io::stdin().read_line(&mut radius_input).expect("Failed to read line");
    let radius: f64 = radius_input.trim().parse().expect("Invalid number");

    let mut width_input = String::new();
    std::io::stdin().read_line(&mut width_input).expect("Failed to read line");
    let width: f64 = width_input.trim().parse().expect("Invalid number");

    let mut height_input = String::new();
    std::io::stdin().read_line(&mut height_input).expect("Failed to read line");
    let height: f64 = height_input.trim().parse().expect("Invalid number");

    // TODO: 반지름을 사용하여 Circle 도형 생성
    
    // TODO: 너비와 높이를 사용하여 Rectangle 도형 생성
    
    // TODO: 각 도형의 넓이를 소수점 첫째 자리까지 출력
    // 형식: "Circle area: {area}" 및 "Rectangle area: {area}"
}

Object Oriented Programming의 모든 레슨