본문 바로가기
Languages/RUST

[RUST] TRPL : Chapter5 - Method & Implement

by odaebum 2024. 11. 27.
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