구조체는 튜플과 비슷하게 서로 다른 데이터 타입의 구성요소들을 저장할 수 있습니다.
일반 구조체
선언
struct User {
username: String,
email: String,
count: u64,
active: bool,
}
struct 키워드로 선언을 하고 구조체의 이름의 첫 글자는 대문자로 시작합니다. 구조체 안의 필드에는 구성요소들을 정의합니다.
예시
let user1 = User {
username: String::from("dean"),
email: String::from("dean@example.com"),
count: 1,
active: true,
};
//정의된 구성요소의 순서가 같지 않아도 상관 없음
let user2 = User {
email: String::from("dean1@example.com"),
count: 2,
username: String::from("dean1"),
active: false,
};
인스턴스를 생성할 때는 정의된 필드의 순서와 같지 않아도 상관없습니다.
let user1 = User {
username: String::from("dean"),
email: String::from("dean@example.com"),
count: 1,
active: true,
};
user1.count = 10; //에러
let mut user2 = User {
username: String::from("dean1"),
email: String::from("dean1@example.com"),
count: 1,
active: true,
};
user2.count = 10; //OK
구조체 인스턴스 필드 값을 변경하려면 인스턴스에 mut 선언을 해야 합니다.
튜플 구조체
튜플 구조체는 튜플과 거의 사용법이 같습니다.
struct Color(i32, String, u32);
let red = Color(10, String::from("dean"), 20);
println!("{}", red.0);
일반 구조체와 달리 필드 구성요소에 데이터 타입만을 명시하고 접근할 때는 구조체_이름. 인덱스로 접근합니다.
그 외에 단위 구조체(unit-like struct)도 있지만 다음에 알아보도록 하겠습니다.
'Rust' 카테고리의 다른 글
[Rust] 참조자(References) 와 빌림(Borrowing) (0) | 2022.04.21 |
---|---|
[Rust] 소유권(Ownership) (0) | 2022.04.19 |
[Rust] 데이터 타입 (0) | 2022.04.16 |
[Rust] 제어문(조건문, 반복문) (0) | 2022.04.12 |
[Rust] 변수 가변성(Mutability) (0) | 2022.04.11 |