구조체 개요
Coddy Rust 여정의 논리와 흐름 섹션에 포함된 레슨. 66개 중 21번째.
이제 struct가 무엇인지 이해했으니, 실제로 struct를 생성하고 사용하는 방법을 알아봅시다. 여기에는 두 단계가 포함됩니다. 먼저 struct의 구조를 정의한 다음, 그 인스턴스를 생성합니다.
구조체를 정의하려면 struct 키워드 뒤에 구조체의 이름과 중괄호 안에 필드를 작성합니다. 각 필드에는 이름과 유형이 있습니다:
struct User {
username: String,
active: bool,
}이는 두 개의 필드를 가진 User struct의 청사진을 생성합니다. 하나는 String 타입의 username이고, 다른 하나는 bool 타입의 active입니다.
명명 규칙: Rust의 구조체 이름은 PascalCase(UpperCamelCase라고도 함)를 사용해야 합니다. 즉, 각 단어가 대문자로 시작합니다. 예를 들어 User, ProductItem 또는 ShoppingCart과 같습니다. 이 규칙을 따르지 않으면 Rust에서 경고를 표시합니다.
struct를 정의한 후에는 각 필드에 대한 값을 지정하여 인스턴스를 만들 수 있습니다:
let user1 = User {
username: String::from("alice"),
active: true,
};각 필드 이름, 콜론, 값이 포함된 중괄호 뒤에 struct 이름을 작성한다는 점에 유의하세요. 필드의 순서는 정의된 순서와 일치하지 않아도 됩니다.
struct instance의 필드에 액세스하려면 점 표기법을 사용하세요. instance 이름 뒤에 점과 필드 이름을 작성합니다.
println!("Username: {}", user1.username);
println!("Active: {}", user1.active);여기서 user1.username은 user1의 username 필드에 액세스하고, user1.active는 active 필드에 액세스합니다. 이러한 필드 값은 일반 변수를 사용하는 모든 곳에서 사용할 수 있습니다.
챌린지
쉬움세 가지 입력을 받습니다. 제품 이름, 가격(소수), 재고 수량(정수)입니다. String 유형의 name, f64 유형의 price, i32 유형의 stock이라는 세 필드를 가진 Product 구조체를 정의하세요. 그런 다음 입력 values를 사용하여 이 구조체의 instance를 생성하고 product information을 출력하세요.
요구 사항:
name: String,price: f64,stock: i32필드를 가진Product구조체를 정의하세요.- 첫 번째 input을 product 이름으로 읽으세요.
- 두 번째 input을 읽고 price를 위해
f64로 변환하세요. - 세 번째 input을 읽고 stock quantity를 위해
i32로 변환하세요. - 이 values로
Product구조체의 instance를 생성하세요. - 아래에 표시된 정확한 형식으로 product information을 출력하세요.
입력:
- 첫 번째 line: Product 이름(예:
Laptop) - 두 번째 line: 소수로 표시된 Price(예:
999.99) - 세 번째 line: 정수로 표시된 Stock quantity(예:
15)
출력:
- 첫 번째 line:
Product: [name] - 두 번째 line:
Price: $[price] - 세 번째 line:
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: 필요한 형식으로 제품 정보를 출력하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Rust 컴파일러