잡학(雜學)

Rust 2장 - 2. 기본 데이터 타입

쪼랩전사 2021. 6. 17. 19:50
728x90

Rust의 기본 데이터 타입은 크게 Scala 타입Compound 타입으로 이루어져 있다.

Scala 타입은 하나의 값만을 가지며, Compound 타입은 여러 개의 값을 가진다.

 

Scala 타입

정수형, 실수형, 불(Bool)형, 문자(char)형이 있다.

분류   표현 크기(byte)
정수형 부호 있는 i8 1
i16 2
i32 4
i64 8
i128 16
isize 아키텍쳐
32bit => 4
64bit => 8
부호 없는 u8 1
u16 2
u32 4
u64 8
u128 16
usize 아키텍쳐
32bit => 4
64bit => 8
실수형   f32 4
f64 8
불형   bool 1 (1바이트다!)
문자형   char 4 (유니코드 지원)

정수형의 표현 방식


fn main() {
    let decimal1 = 98_222;
    let decimal2 = 12345;
    let hex      = 0xff;
    let octal    = 0o77;
    let binary   = 0b111;
    let byte     = b'A';

    println!("{}", decimal1);
    println!("{}", decimal2);
    println!("{}", hex);
    println!("{}", octal);
    println!("{}", binary);
    println!("{}", byte);
}

rust는 특이하게도 바이너리까지도 지원한다.

 

또한, 숫자 사이사이에 _ (Underscore)를 넣을 수 있는데, 1_2_3___344 이렇게 넣어도 에러가 발생하지 않고 정상 동작한다.

숫자 3개마다 , (comma)를 찍는 것처럼 사용해도 되고, 어떻게 사용하는지는 개발자에게 달렸다.

기타 표현방식

실수형은 123.23처럼 . (dot) 을 사용하고,

불형은 true, false,

문자형은 '𝄞' 처럼 작은따옴표 사이에 Unicode를 넣으면 된다.

 

정수형 특징

Rust는 정수형을 쓸 때, 참 좋은 특징이 있다.


fn main() {
    let x: u8 = 250 + 250;
    println!("{}", x);
}

위 같은 경우, 다른 언어들은 대부분 오버플로 문제가 예견되어도 빌드도 되고, 실행도 된다.


error: this arithmetic operation will overflow
 --> src/main.rs:2:17
  |
2 |     let x: u8 = 250 + 250;
  |                 ^^^^^^^^^ attempt to compute `250_u8 + 250_u8`, which would overflow
  |
  = note: `#[deny(arithmetic_overflow)]` on by default

error: aborting due to previous error

아주 좋다.
Rust는 overflow가 발생한다고, 컴파일 과정에서 알려준다.

Compund 타입

튜플과 배열, 두 가지가 있다.

튜플(Tuple)

크기가 고정된 타입으로, 각 요소의 타입이 일치할 필요가 없다.

튜플을 선언하기 위해서는 소괄호를 사용하며, 각 요소를 구분하기 위해 , (comma)를 사용한다.


fn main() {
    let tup = ("asdf", 6.4, 123);
    println!("{:?}", tup);
    println!("{}", tup.0);

    let (_a, b, _c) = tup;
    println!("{}", b);
}

튜플에서 특정 요소에 접근하기 위해서는 .0, .2 처럼 점과 숫자를 통해서 접근할 수 있다.

또한, 두 번째 let처럼 uncoupling이 가능하다.

 

배열(Array)

Tuple과 마찬가지로 크기가 고정된 타입이다.

하지만 각 요소의 타입은 같아야 한다.

배열을 선언하기 위해서는 대괄호를 사용하며, 각 요소를 구분하기 위해 , (comma)를 사용한다.


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

    println!("{:?}", arr   );
    println!("{}"  , arr[3]);
}

각 요소에 접근하기 위해서는 [3] 과 같이 대괄호와 숫자를 이용한다.

 

'잡학(雜學)' 카테고리의 다른 글

Centos 7 잡학  (0) 2021.07.20
Rust 2장 - 3. 문자열  (0) 2021.06.24
Rust 2장 - 1. 변수와 상수  (0) 2021.06.15
억지 기법  (0) 2021.06.13
Rust 1장. Hello World!  (0) 2021.06.12