Menu
Coddy logo textTech

함수 매개변수로서의 구조체

Coddy Rust 여정의 Logic & Flow 섹션에 포함된 레슨 — 66개 중 24번째.

이제 구조체를 생성하고 수정하는 방법을 알게 되었으니, 함수와 함께 사용하는 방법을 살펴보겠습니다. Rust의 다른 데이터 타입과 마찬가지로, 구조체 인스턴스를 함수에 전달하거나 함수에서 반환할 수 있습니다.

구조체를 함수에 전달하려면, 함수 정의에서 이를 매개변수로 포함하기만 하면 됩니다:

fn calculate_area(rect: Rectangle) -> i32 {
    rect.width * rect.height
}

이 함수는 Rectangle 구조체를 매개변수로 받아서 i32를 반환합니다. 함수 내부에서는 다른 곳에서와 마찬가지로 점 표기법을 사용하여 구조체의 필드에 접근할 수 있습니다.

반환 타입으로 구조체 타입을 지정하여 함수에서 구조체를 반환할 수도 있습니다:

fn create_square(size: i32) -> Rectangle {
    Rectangle {
        width: size,
        height: size,
    }
}

함수와 함께 구조체(structs)를 사용하면 코드가 더 체계적이고 의미 있게 됩니다. 여러 개의 개별 매개변수를 전달하는 대신, 관련된 데이터를 함께 그룹화하여 정의가 잘 된 하나의 단위로 전달할 수 있습니다.

challenge icon

챌린지

쉬움

네 개의 입력을 받게 됩니다: 사각형의 너비(정수), 사각형의 높이(정수), 정사각형의 한 변의 길이(정수), 그리고 선택 번호(1 또는 2). width: i32height: i32라는 두 개의 필드를 가진 Rectangle 구조체를 정의하세요. 두 개의 함수를 만드세요: 하나는 Rectangle을 매개변수로 받아 면적을 계산하는 함수이고, 다른 하나는 변의 길이를 매개변수로 받아 정사각형을 나타내는 Rectangle을 반환하는 함수입니다. 입력받은 선택 번호에 따라 적절한 면적을 계산하고 출력하세요.

요구 사항:

  • width: i32height: i32 필드를 가진 Rectangle 구조체를 정의합니다.
  • Rectangle을 매개변수로 받아 i32(면적)를 반환하는 calculate_area 함수를 만듭니다.
  • i32(변의 길이)를 매개변수로 받아 너비와 높이가 같은 Rectangle을 반환하는 create_square 함수를 만듭니다.
  • 첫 번째 입력을 읽어 사각형의 너비를 위한 i32로 변환합니다.
  • 두 번째 입력을 읽어 사각형의 높이를 위한 i32로 변환합니다.
  • 이 치수들을 사용하여 Rectangle 인스턴스를 생성합니다.
  • 세 번째 입력을 읽어 정사각형의 변의 길이를 위한 i32로 변환합니다.
  • 네 번째 입력을 읽어 선택 번호(1 또는 2)를 위한 i32로 변환합니다.
  • 선택 번호가 1인 경우: 사각형의 면적을 계산하고 출력합니다.
  • 선택 번호가 2인 경우: create_square를 사용하여 정사각형을 생성한 후, 그 면적을 계산하고 출력합니다.

입력:

  • 첫 번째 줄: 정수 형태의 사각형 너비 (예: 8)
  • 두 번째 줄: 정수 형태의 사각형 높이 (예: 5)
  • 세 번째 줄: 정수 형태의 정사각형 변의 길이 (예: 6)
  • 네 번째 줄: 1 또는 2 중 하나의 정수 형태 선택 번호 (예: 1)

출력:

  • 선택 번호가 1인 경우: Rectangle area: [area]
  • 선택 번호가 2인 경우: Square area: [area]

치트 시트

구조체는 함수의 매개변수로 전달될 수 있으며, 함수에서 반환될 수도 있습니다.

구조체를 함수에 전달하려면, 이를 매개변수로 포함하세요:

fn calculate_area(rect: Rectangle) -> i32 {
    rect.width * rect.height
}

함수에서 구조체를 반환하려면, 반환 타입으로 구조체 타입을 지정하세요:

fn create_square(size: i32) -> Rectangle {
    Rectangle {
        width: size,
        height: size,
    }
}

함수 내부에서는 점 표기법(dot notation)을 사용하여 구조체 필드에 접근합니다. 함수와 함께 구조체를 사용하면 여러 개의 개별 매개변수를 전달하는 대신 관련된 데이터를 하나로 묶을 수 있습니다.

직접 해보기

use std::io;

// TODO: 여기에 Rectangle 구조체를 정의하세요


// TODO: 여기에 calculate_area 함수를 정의하세요


// TODO: 여기에 create_square 함수를 정의하세요


fn main() {
    // 사각형의 너비를 읽습니다
    let mut width_input = String::new();
    io::stdin().read_line(&mut width_input).expect("Failed to read line");
    let width: i32 = width_input.trim().parse().expect("Invalid input");
    
    // 사각형의 높이를 읽습니다
    let mut height_input = String::new();
    io::stdin().read_line(&mut height_input).expect("Failed to read line");
    let height: i32 = height_input.trim().parse().expect("Invalid input");
    
    // 정사각형의 변 길이를 읽습니다
    let mut side_input = String::new();
    io::stdin().read_line(&mut side_input).expect("Failed to read line");
    let side: i32 = side_input.trim().parse().expect("Invalid input");
    
    // 선택지를 읽습니다
    let mut choice_input = String::new();
    io::stdin().read_line(&mut choice_input).expect("Failed to read line");
    let choice: i32 = choice_input.trim().parse().expect("Invalid input");
    
    // TODO: 아래에 코드를 작성하세요
    // Rectangle 인스턴스를 생성하고, 선택지를 확인한 후, 적절한 면적을 계산하세요
    
    
    // 선택지에 따라 결과를 출력합니다
    // 사용 예: println!("Rectangle area: {}", area); 또는 println!("Square area: {}", area);
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨