728x90
Chapter 5
구조체
→ 튜플보다 더 유연하고, 인스턴트의 값을 지정하거나 액세스하기 위해 데이터 순서에 의존할 필요가 없다.
struct User {
active: bool,
username: String,
email: String,
sign_in_count: u64,
}
fn main() {
let user1 = User {
active: true,
username: String::from("someusername123"),
email: String::from("someone@example.com"),
sign_in_count: 1,
};
}
꿀팁
- 이름이 같으면 아래와 같이 속기가 가능하다
fn build_user(email: String, username: String) -> User {
User {
active: true,
username, //username: username,
email, //email: email,
sign_in_count: 1,
}
}
..
를 통해서 나머지 인스턴스의 필드를 가져올 수 있다.
fn main() {
// --snip--
let user2 = User {
email: String::from("another@example.com"),
..user1
};
}
구조체 디버깅 및 출력
#[derive(Debug)]
을 추가한다.
#[derive(Debug)]
struct Rectangle {
width: u32,
height: u32,
}
fn main() {
let rect1 = Rectangle {
width: 30,
height: 50,
};
println!("rect1 is {rect1:?}");
}
메서드
impl
을 통해서 작성한다.
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
fn can_hold(&self, other: &Rectangle) -> bool {
self.width > other.width && self.height > other.height
}
//생성도 가능
fn square(size: u32) -> Self {
Self {
width: size,
height: size,
}
}
}
728x90
'Languages > RUST' 카테고리의 다른 글
[RUST] TRPL : Chapter 7 - Project (0) | 2024.11.29 |
---|---|
[RUST] TRPL : Chapter6 - Enum & Match (0) | 2024.11.28 |
[RUST] &String vs &str (0) | 2024.11.27 |
[RUST] TRPL : Chapter 4 - Ownership (0) | 2024.11.27 |
[RUST] TRPL : Chapter3 - Programming (0) | 2024.11.26 |