Rust 튜토리얼 목차

Chapter 1 - 마무리

Rust의 기초는 그렇게 나쁘지 않죠?

시스템 프로그래밍 언어로서, Rust는 메모리 내 값을 매우 신경쓰며,

수정이 가능한지 불가능한지 여부, 그리고 수학 연산이 의도한 대로 수행되는지 확인합니다.

참고:

enum Shape {
    Circle(f64),             // 반지름
    Rectangle(f64, f64),     // 가로, 세로
    Triangle(f64, f64, f64), // 세 변의 길이
}

// 넓이를 계산하는 함수
fn area(shape: &Shape) -> f64 {
    match shape {
        Shape::Circle(r) => 3.14 * r * r,
        Shape::Rectangle(w, h) => w * h,
        Shape::Triangle(a, b, c) => {
            // 삼각형의 넓이 공식
            let s = (a + b + c) / 2.0;
            let area = s * (s - a) * (s - b) * (s - c);
            // 넓이가 음수면 에러 발생
            if area < 0.0 {
                panic!("Invalid triangle");
            } else {
                area.sqrt()
            }
        }
    }
}

// 둘레를 계산하는 함수
fn perimeter(shape: &Shape) -> f64 {
    match shape {
        Shape::Circle(r) => 2.0 * 3.14 * r,
        Shape::Rectangle(w, h) => 2.0 * (w + h),
        Shape::Triangle(a, b, c) => {
            // 삼각형의 둘레 공식
            let p = a + b + c;
            // 둘레가 음수면 에러 발생
            if p < 0.0 {
                panic!("Invalid triangle");
            } else {
                p
            }
        }
    }
}

// 정사각형인지 판별하는 함수
fn is_square(shape: &Shape) -> bool {
    match shape {
        Shape::Circle(_) => false,
        Shape::Rectangle(w, h) => w == h,
        Shape::Triangle(_, _, _) => false,
    }
}

// 결과
/*
원 넓이: 12.56
사각형 넓이: 12
삼각형 넓이: 6
원 둘레: 12.56
사각형 둘레: 14
삼각형 둘레: 12
원이 정사각형인가? false
사각형이 정사각형인가? false
삼각형이 정사각형인가? false
*/
fn main() {
    // Shape 타입의 값들을 생성합니다.
    let circle = Shape::Circle(2.0);
    let rectangle = Shape::Rectangle(3.0, 4.0);
    let triangle = Shape::Triangle(3.0, 4.0, 5.0);

    // 각 도형의 넓이를 출력합니다.
    println!("원 넓이: {}", area(&circle));
    println!("사각형 넓이: {}", area(&rectangle));
    println!("삼각형 넓이: {}", area(&triangle));

    // 각 도형의 둘레를 출력합니다.
    println!("원 둘레: {}", perimeter(&circle));
    println!("사각형 둘레: {}", perimeter(&rectangle));
    println!("삼각형 둘레: {}", perimeter(&triangle));

    // 각 도형이 정사각형인지 출력합니다.
    println!("원이 정사각형인가? {}", is_square(&circle));
    println!("사각형이 정사각형인가? {}", is_square(&rectangle));
    println!("삼각형이 정사각형인가? {}", is_square(&triangle));
}