러스트 튜토리얼 (4) - 구조체

DaeyeolKim·2022년 5월 17일
0

러스트 내공부

목록 보기
4/4
  • 구조체 : 사용자들이 연관된 여러 값들을 묶어서 의미있는 데이터 단위를 정의

일반 구조체

  • 구조체를 정의 할 때는 struct 키워드 사용
    struct User {
      username: String,
      email: String,
      sign_in_count: u64,
      active: bool,
    }
  • 정의한 구조체를 사용할려면 각 필드의 값을 명세한 인스턴스 생성
    let user1 = User {
      email: String::from("someone@example.com"),
      username: String::from("someusername123"),
      active: true,
      sign_in_count: 1,
    };
  • 구조체에서 값을 읽어오려면, 점(.) 표기법 사용
  • 값을 변경할 때도 마찬가지
    fn build_user(email: String, username: String) -> User {
      User {
          email: email,
          username: username,
          active: true,
          sign_in_count: 1,
      }
    }
  • 구조체 초기화 방법 - 함수 이용
    fn build_user(email: String, username: String) -> User {
      User {
          email,
          username,
          active: true,
          sign_in_count: 1,
      }
    }
  • 구조체 초기화 방법 - 구조체 갱신법 이용
    let user2 = User {
      email: String::from("another@example.com"),
      username: String::from("anotherusername567"),
      active: user1.active,
      sign_in_count: user1.sign_in_count,
    };
  • 구조체 초기화 방법 - 다른 구조체의 필드와 동일한 값이 들어갈 때
    - email/username은 원하는 값을 넣고, 나머지는 user1의 값과 동일
    let user2 = User {
      email: String::from("another@example.com"),
      username: String::from("anotherusername567"),
      ..user1
    };

튜플 구조체

  • 구조체 명을 통해 의미 부여가 가능하나, 타입만 정의
struct Color(i32, i32, i32);
struct Point(i32, i32, i32);

let black = Color(0, 0, 0);
let origin = Point(0, 0, 0);

println!로 구조체 출력하기

  • {} 내에 :? 혹은 :#? 명시자를 집어넣어 Debug 포맷 사용 요청
  • #[derive(Debug)]를 젤 첫줄에 넣어줘 명시적 Debug 허용
#[derive(Debug)] 
struct Rectangle {
    length: u32,
    width: u32,
}

fn main() {
    let rect1 = Rectangle { length: 50, width: 30 };

    println!("rect1 is {:?}", rect1);
}
  • :? 의 결과
rect1 is Rectangle { length: 50, width: 30 }
  • :#? 의 결과
rect1 is Rectangle {
    length: 50,
    width: 30
}
profile
BioSignal Processing/ Deep Learning/ Block Chain

0개의 댓글