Menu
Coddy logo textTech

구조체 개요

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

이제 구조체가 무엇인지 이해했으므로, 실제로 구조체를 생성하고 사용하는 방법을 배워보겠습니다. 여기에는 두 가지 단계가 포함됩니다. 먼저 구조체의 구조를 정의한 다음, 해당 구조체의 인스턴스를 생성하는 것입니다.

구조체를 정의하려면, struct 키워드 뒤에 구조체의 이름과 중괄호 안에 필드들을 작성합니다. 각 필드는 이름과 타입을 가집니다:

struct User {
    username: String,
    active: bool,
}

이것은 String 타입의 usernamebool 타입의 active라는 두 개의 필드를 가진 User 구조체를 위한 청사진을 생성합니다.

명명 규칙: Rust의 구조체 이름은 PascalCase(UpperCamelCase라고도 함)를 사용해야 합니다. 이는 각 단어가 대문자로 시작함을 의미합니다. 예를 들어 User, ProductItem, 또는 ShoppingCart가 있습니다. 이 규칙을 따르지 않으면 Rust에서 경고를 표시합니다.

구조체를 정의한 후에는 각 필드의 값을 지정하여 구조체의 인스턴스를 생성할 수 있습니다:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

구조체 이름 뒤에 각 필드 이름, 콜론, 그리고 값이 포함된 중괄호를 작성한다는 점에 유의하세요. 필드의 순서는 정의된 순서와 일치하지 않아도 됩니다.

구조체 인스턴스의 필드에 접근하려면 점 표기법(dot notation)을 사용하세요 — 인스턴스 이름 뒤에 마침표와 필드 이름을 작성합니다:

println!("Username: {}", user1.username);
println!("Active: {}", user1.active);

여기서 user1.usernameuser1username 필드에 접근하고, user1.activeactive 필드에 접근합니다. 이러한 필드 값은 일반 변수를 사용하는 곳이라면 어디에서나 사용할 수 있습니다.

challenge icon

챌린지

쉬움

상품 이름, 가격(소수점 포함 숫자), 재고 수량(정수)의 세 가지 입력을 받게 됩니다. String 타입의 name, f64 타입의 price, i32 타입의 stock이라는 세 개의 필드를 가진 Product 구조체를 정의하세요. 그런 다음 입력받은 값을 사용하여 이 구조체의 인스턴스를 생성하고 상품 정보를 출력하세요.

요구 사항:

  • name: String, price: f64, stock: i32 필드를 가진 Product 구조체를 정의합니다.
  • 첫 번째 입력을 상품 이름으로 읽습니다.
  • 두 번째 입력을 읽고 가격을 위해 f64로 변환합니다.
  • 세 번째 입력을 읽고 재고 수량을 위해 i32로 변환합니다.
  • 이 값들을 사용하여 Product 구조체의 인스턴스를 생성합니다.
  • 아래에 표시된 정확한 형식으로 상품 정보를 출력합니다.

입력:

  • 첫 번째 줄: 상품 이름 (예: Laptop)
  • 두 번째 줄: 소수점 포함 숫자로 된 가격 (예: 999.99)
  • 세 번째 줄: 정수로 된 재고 수량 (예: 15)

출력:

  • 첫 번째 줄: Product: [name]
  • 두 번째 줄: Price: $[price]
  • 세 번째 줄: Stock: [quantity]

직접 해보기

use std::io;

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


fn main() {
    // 제품 이름 읽기
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // 가격 읽기
    let mut price_input = String::new();
    io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");
    
    // 재고 수량 읽기
    let mut stock_input = String::new();
    io::stdin().read_line(&mut stock_input).expect("Failed to read line");
    let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
    
    // TODO: 입력값을 사용하여 Product 구조체의 인스턴스를 생성하세요
    
    
    // TODO: 요구된 형식으로 제품 정보를 출력하세요
    
}
quiz icon실력 점검

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

Logic & Flow의 모든 레슨