Rust Data Types에 대해

고승우·2023년 6월 2일
0
post-thumbnail

Rust Data Type 공식 doc

Data Type

러스트에서의 데이터는 정적이다. 러스트에는 두 가지 타입이 존재한다: scalar와 compound에 관해 알아보자. 러스트는 정적인 언어이기 때문에, 컴파일 단계에서 타입을 알고 있어야 한다.

scalar type

scalar는 하나의 값으로 표현되는 타입이다. Rust는 정수형, 부동소수점 숫자, boolean, 그리고 문자, 네 가지 scalar 타입을 보유하고 있다.


Integer (정수 타입)

정수형은 소수점이 없는 숫자이다. 각 signed 숫자는 (2n1)-(2^{n - 1}) 부터 (2n11)(2^{n - 1} - 1) 까지 표현이 가능하다. 각 unsigned 숫자는 0에서 (2n1)(2^{n} - 1) 까지의 숫자가 표현 가능하다.


Floating-Point (부동 소수점 타입)

Rust에도 부동소수점을 표현하는 두 가지 기본 타입 f32f64가 있다. 기본 타입은f64이다. 최신 CPU에서는 32비트와 64비트 연산하는 속도가 별 차이 없지만, 정확도는 훨씬 높아지기 때문이다.

fn main() {
    let x = 2.0; // f64

    let y: f32 = 3.0; // f32
}

Boolean

대부분의 다른 언어들처럼, true, false 값을 가질 수 있다.


Character (문자 타입)

char 타입은 Unicode Scalar를 표현하는 값이고, 이는 ASCII 보다 많은 표현을 가능하게 한다. "문자"는 Unicode를 위한 개념이 아니기 때문에, 인간적 직관에 따른 "문자"와 동일하지 않을 수 있다.


Compound Type (복합 타입)

복합 타입들은 다른 타입의 다양한 값들을 하나의 타입으로 묶을 수 있다. 대표적인 예로 tuplesarrays가 있다.


tuple (튜플)

튜플에 포함되는 각 값이 타입은 동일할 필요 없이 서로 달라도 된다. 타입 명시는 선택 사항이다.

fn main() {
    let tup: (i32, f64, u8) = (500, 6.4, 1);
    let (x, y, z) = tup;
    println!("The value of y is: {}", y);	// 6.4
    println!("The value of first element is: {}", tup.0);	// 500
}

array (배열)

배열을 구성하는 모든 element는 같은 타입을 가져야 하며, 배열의 크기는 고정이다. element의 타입 명시는 선택 사항이다.

// 타입을 명시한 리스트
let a: [i32; 5] = [1, 2, 3, 4, 5];

// 3으로 5개가 채워진 리스트
let a = [3; 5];		// [3, 3, 3, 3, 3]

이 코드는 인덱스를 벗어난 숫자를 입력한 경우 panic이 일어난다.

use std::io;

fn main() {
    let a = [1, 2, 3, 4, 5];

    println!("Please enter an array index.");

    let mut index = String::new();

    io::stdin()
        .read_line(&mut index)
        .expect("Failed to read line");

    let index: usize = index
        .trim()
        .parse()
        .expect("Index entered was not a number");

    let element = a[index];

    println!("The value of the element at index {index} is: {element}");
}
profile
٩( ᐛ )و 

0개의 댓글