본문 바로가기

Rust

[Rust] 구조체

구조체는 튜플과 비슷하게 서로 다른 데이터 타입의 구성요소들을 저장할 수 있습니다.

 

일반 구조체

선언

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