Rust 데이타 타입 (Scalar)

Rust 데이타 타입 (1)

Rust는 Statically Type Language로서, 프로그램 상의 모든 데이타 타입을 컴파일 시점에 결정하고 각 타입에 위배되는 코드들이 없는지 컴파일러가 미리 체크하여 불필요한 에러를 사전에 방지하게 된다. 변수를 정의할 때, 특별히 데이타 타입이 지정되지 않은 경우는 Rust 컴파일러가 그 데이타 타입을 값을 보고 추론(infer)하여 결정하게 되고, 데이타 타입이 명시된 경우는 해당 타입을 사용하게 된다.

Rust에는 단일 값을 나타내는 스칼라 타입(Scalar Type)과 여러 값들로 구성된 복합 타입(Compound Type)이 있다. 여기에서는 먼저 스칼라 타입에 대해 알아본다.

스칼라 타입

스칼라 타입(scalar type)은 하나의 값을 갖는 타입을 의미하는데, Rust에는 크게 정수형, 부동소수점형, 부울린형, 문자형 등 4가지 종류의 스칼라 타입들이 있다.

정수형

정수형은 i8, i32, i8, u32 등과 같이 정수를 포함하는 타입으로, 부호가 있는 정수(signed integer)는 i, 부호가 없는 정수(unsigned integer)는 u를 사용하고, 그 뒤에 정수가 들어가는 크기(비트수)를 적는다. 예를 들어, i8은 8비트 크기의 Signed 정수이고, u32는 32비트의 Unsigned 정수이다. 아래 표는 Rust에서 지원하는 정수형 데이타 타입들이다.

크기 Signed Unsigned
8비트 i8 u8
16비트 i16 u16
32비트 i32 u32
64비트 i64 u64
128비트 i128 u128
아키텍처에 따라 변동 isize usize

마지막의 isize, usize의 경우는, 프로그램이 실행되는 아키텍처에 따라 변경되는 것인데, 64비트 아키텍처이면 64비트가 되고, 32비트 아키텍쳐이면 32비트 크기의 정수형을 나타낸다.

정수값을 지정하기 위해서는 아래 예제와 같이 10진수, 16진수, 8진수, 이진수 등을 모두 사용할 수 있으며, 자릿수가 많은 데이타에 대한 가독성을 높이기 위해 숫자 안에 밑줄(_)을 사용할 수 있다. 예를 들어, 10진수 1_000_000 은 1000000 과 동일하다.

fn main() {
    let a: i32 = 1_000_000; // 10진수, 백만
    let a = 0xff;    // 16진수
    let a = 0o15;    // 8진수
    let a =  0b1111_1111; // 2진수
    let a: u8 = b'A';   // 바이트 (앞에 b를 붙임)
}

부동소수점형

소수점이 있는 부동소수점 데이타 타입에는 32비트 크기를 가진 f32와 64비트 크기를 가진 f64가 있다. Rust에서 별도로 부동소수점 타입을 지정하지 않는 소수값에 대해서는 컴파일러가 디폴트로 f64를 지정한다.

let a: f32  = 3.14;   // f32
let b = 3.14;         // f64

부울린형

부울린 타입은 bool 키워드를 사용하고, true 혹은 false 값을 갖는다.

let a: bool = false;

문자형

Rust에서 문자 타입은 char 키워드를 사용하고, 4바이트의 크기를 갖는다. char 타입은 유니코드 스칼라 값들을 갖게 되는데, U+0000 ~ U+D7FF와 U+E000 ~ U+10FFFF 범위 값들을 가질 수 있다. 이러한 유니코드 문자가 아닌, 1 바이트의 값을 표현하기 위해서는 u8 타입을 사용한다.

let a: char = 'A';    // U+0041

This site is not affiliated with or endorsed by the Rust Foundation or Rust Project.