구조체 개요
Coddy Rust 여정의 Logic & Flow 섹션에 포함된 레슨 — 66개 중 21번째.
이제 구조체(structs)가 무엇인지 이해했으므로, 실제로 구조체를 생성하고 사용하는 방법을 배워보겠습니다. 여기에는 두 가지 단계가 포함됩니다. 먼저 구조체의 구조를 정의하고, 그다음으로 인스턴스를 생성하는 것입니다.
구조체를 정의하려면, struct 키워드를 사용하고 그 뒤에 구조체의 이름과 중괄호 안에 필드들을 작성합니다. 각 필드는 이름과 타입을 가집니다:
struct User {
username: String,
active: bool,
}이것은 두 개의 필드, 즉 String 타입의 username과 bool 타입의 active를 가진 User 구조체에 대한 청사진을 생성합니다.
Rust의 구조체 이름은 PascalCase(CamelCase라고도 함)를 따릅니다. 각 단어는 밑줄 없이 대문자로 시작하며, 밑줄을 사용하지 않습니다. 예를 들어:
User, BlogPost, GamePlayer.구조체를 정의한 후에는, 각 필드에 대한 값을 지정하여 구조체의 인스턴스를 생성할 수 있습니다:
let user1 = User {
username: String::from("alice"),
active: true,
};구조체 이름 뒤에 각 필드 이름, 콜론, 그리고 값이 포함된 중괄호를 제공한다는 점에 유의하세요. 필드의 순서는 정의된 순서와 일치할 필요가 없습니다.
구조체 인스턴스에서 필드 값을 가져오려면 점 표기법(dot notation)을 사용하세요. 인스턴스 이름 뒤에 점과 필드 이름을 붙입니다:
println!("{}", user1.username); // alice
println!("{}", user1.active); // true인스턴스가 let mut으로 선언된 경우, 점 표기법을 사용하여 필드 값을 업데이트할 수도 있습니다:
let mut user1 = User {
username: String::from("alice"),
active: true,
};
user1.active = false;챌린지
쉬움세 개의 입력을 받습니다: 상품 이름, 가격(소수), 그리고 재고 수량(정수). name (String 타입), price (f64 타입), stock (i32 타입)이라는 세 개의 필드를 가진 Product 구조체를 정의하세요. 그런 다음 입력값을 사용하여 이 구조체의 인스턴스를 생성하고 상품 정보를 출력하세요.
요구 사항:
name: String,price: f64,stock: i32필드를 가진Product구조체를 정의합니다.- 첫 번째 입력을 상품 이름으로 읽습니다.
- 두 번째 입력을 읽고 가격을 위해
f64로 변환합니다. - 세 번째 입력을 읽고 재고 수량을 위해
i32로 변환합니다. - 이 값들을 사용하여
Product구조체의 인스턴스를 생성합니다. - 아래에 표시된 정확한 형식으로 상품 정보를 출력합니다.
입력:
- 첫 번째 줄: 상품 이름 (예:
Laptop) - 두 번째 줄: 소수로 된 가격 (예:
999.99) - 세 번째 줄: 정수로 된 재고 수량 (예:
15)
출력:
- 첫 번째 줄:
Product: [name] - 두 번째 줄:
Price: $[price] - 세 번째 줄:
Stock: [quantity]
치트 시트
Struct 이름은 PascalCase를 사용합니다 (예: UserAccount). 구조체를 정의하려면 struct 키워드 뒤에 구조체의 이름과 중괄호 안에 필드들을 작성합니다:
struct User {
username: String,
active: bool,
}각 필드는 이름과 타입을 가집니다.
구조체의 인스턴스를 생성하려면 각 필드에 대한 값을 지정합니다:
let user1 = User {
username: String::from("alice"),
active: true,
};인스턴스에서 필드의 순서는 정의된 순서와 일치하지 않아도 됩니다.
필드에 접근하려면 점 표기법(dot notation)을 사용합니다 — 인스턴스 이름 뒤에 마침표와 필드 이름을 붙입니다:
println!("{}", user1.username); // prints: alice
println!("{}", user1.active); // prints: true직접 해보기
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: 요구된 형식으로 제품 정보를 출력하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.