struct#

struct 기본적인 사용법#

Rust의 Struct 사용법을 알아 봅시다.
다음 예제의 struct Person { ~~~ } 부분은 구조체를 정의하고 있습니다.
Person 구조체는 name, age, is_student의 Field를 가지고 있으며, 각 Field 마다 type이 정의 되었습니다.

struct Person {
    name: String,
    age: i32,
    is_student: bool,
}

fn main() {
    let mut person = Person {
        name: String::from("semonan.com"),
        age: 12,
        is_student: true,
    };
    println!("{}, {}, {}", person.name, person.age, person.is_student);

    person.age = 13;
    println!("{}, {}, {}", person.name, person.age, person.is_student);
}

let mut person = Person { ~~~ }과 같이, 구조체는 Instance로 생성되어야 사용할 수 있습니다.
위 예제에서는 각 Field의 값을 변경할 수 있도록 mutable로 Instance를 생성했습니다.
person.name, person.age, person.is_student 처럼 코딩하면 구조체의 값을 읽을 수 있습니다.
person.age = 13; 처럼 코딩하면 값을 변경할 수 있습니다.

Field명과 변수명이 같다면 1번만 코딩해도 된다#

다음 예제의 let person = Person { ~~~ }; 은 Instance를 생성하는 코드 입니다.
{ ~~~ } 안에서 age: 11의 형태로 값을 입력하고 있습니다.
그 아래 코드 라인은 name, 으로 코딩하였는데, 변수로부터 값을 입력하는 경우 Field명과 변수명이 같다면 1번만 코딩해도 됩니다.
여기서, namename: name과 동일합니다.

struct Person {
    age: i32,
    name: String,
}

fn main() {
    let name = String::from("semonan.com");

    let person = Person {
        age: 11,
        name,    // Same with --> name: name,
    };
    
    println!("{}, {}", 
        person.age,
        person.name
    );
}

Struct Update Syntax는 알아두면 매우 편리하다#

다음 예제의 let person_2 = Person { ~~~ }; 부분을 살펴봅시다.
person_2를 생성하는 코드인데,
name: String::from("simon"), 처럼 코딩하여 name field는 값을 직접 입력하고,
나머지 field는 ..person_1처럼 코딩하여 person_1과 같은 값을 가지도록 합니다.
이 문법은 Struct의 field 수가 많을수록 유용하게 사용될 수 있습니다.

struct Person {
    age: i32,
    name: String,
    weight: i32,
    is_student: bool,
}

fn main() {
    let person_1 = Person {
        age: 11,
        name: String::from("semonan.com"),
        weight: 99,
        is_student: true,
    };

    let person_2 = Person {
        name: String::from("simon"),
        ..person_1
    };
    
    println!("{}, {}, {}, {}", 
        person_2.age,
        person_2.name,
        person_2.weight,
        person_2.is_student
    );
}

Tuple Structs#

다음 예제를 통하여 Tuple structs를 알아 봅시다.
Tuple structs는 예제의 struct Color (i32, i32, i32);과 같이 정의 될 수 있는데, Field의 Name을 생략하고 Type만 코딩 하였습니다.
그리고 각 Field의 Type은 동일하지 않아도 됩니다.
Tuple structs의 Instance를 생성은 let mut my_color = Color(50, 100, 150);와 같이 코딩 할 수 있으며, Field name이 없기 때문에 값만 입력합니다.
그리고 Field에 접근 할 때는 my_color.0 처럼 읽거나, my_color.0 = 10;처럼 쓰기 할 수 있습니다.

struct Color (i32, i32, i32);

fn main() {
    let mut my_color = Color(50, 100, 150);
    
    println!("\n {}\n {}\n {}\n", 
        my_color.0,
        my_color.1,
        my_color.2
    );

    my_color.0 = 10;
}