데이터 타입
데이터 타입
러스트는 정적 타입의 언어이다. 따라서 모든 변수의 타입이 컴파일 시점에 반드시 정해져 있어야 한다.
러스트의 기본 데이터 타입 종류는 다음과 같다.
- 스칼라 타입
- 정수
- 부동 소수점
- 불리언
- 문자
- 복합 타입
- 튜플
- 배열
- 슬라이스
스칼라 타입
스칼라 타입은 하나의 값을 표현한다.
정수
| Size | Signed | Unsigned |
|---|---|---|
| 8-bit | i8 | u8 |
| 16-bit | i16 | u16 |
| 32-bit | i32 | u32 |
| 64-bit | i64 | u64 |
| 128-bit | i128 | u128 |
| arch | isize | usize |
isize와 usize는 컴퓨터 환경에 따라 달라진다.
64-bit 아키텍처에서는 64비트로, 32-bit 아키텍처에서는 32비트로 결정된다.
정수형 리터럴은 10진수, 16진수, 8진수, 2진수, 문자를 지원한다.
| 리터럴 | 예시 |
|---|---|
| Decimal | 98_222 |
| Hex | 0xff |
| Octal | 0o77 |
| Binary | 0b1111_0000 |
Byte(u8 only) | b'A' |
참고
- 숫자 리터럴 뒤에 타입 접미사를 사용하여 타입을 지정할 수 있다. (
300u16)- 정수는 읽기 쉽게 하기 위해
_를 컴마처럼 사용할 수 있다. (1000000=1_000_000)
부동 소수점
부동 소수점은 32-bit인 f32와 64-bit인 f64가 있다.
불리언
불리언 타입은 bool이다.
true와 false 두 값만 가진다.
크기는 1바이트이다.
문자
4바이트 크기인 char이다.
작은 따옴표로 표현한다.
러스트의 char는 ASCII보다 더 많은 값을 표현한다.
복합 타입
복합 타입은 여러 값이 하나의 타입으로 묶인 것이다.
튜플
튜플은 다양한 타입의 값을 여러 개 묶어 하나의 타입으로 만든 것이다. 고정된 길이와 타입을 갖는다.
튜플 타입은 괄호 안에 여러 타입을 쉼표로 구분하여 만든다.
let tup: (i32, f64, u8) = (500, 6.4, 1);
튜플의 값은 쉽게 해체할 수 있다.
let tup: (i32, f64, u8) = (500, 6.4, 1);
let (x, y, z) = tup;
. 뒤에 인덱스를 입력하여 튜플 요소에 접근할 수 있다.
let x: (i32, f64, u8) = (500, 6.4, 1);
let n = x.0;
let d = x.1;
let b = x.2;
아무 값도 없는 튜플은 유닛(unit)이라는 특별한 이름을 갖는다. 이 값과 타입은 모두
()로 작성된다. 표현식이 어떤 값도 반환하지 않는다면 암묵적으로 유닛 값을 반환한다.
배열
배열은 같은 타입의 값을 여러 개 묶어 하나의 타입으로 만든 것이다. 러스트의 배열은 고정된 길이를 갖는다.
대괄호 안에 쉼표로 구분한 값들을 나열하여 배열을 만들 수 있다.
배열의 타입은 [요소 타입; 요소 개수] 형식으로 작성한다.
let a: [i32; 5] = [1, 2, 3, 4, 5];
초깃값과 배열 길이를 입력하여 모든 요소가 동일한 배열을 생성할 수 있다.
let a = [3; 5]; // [3, 3, 3, 3, 3]
요소에 접근할 때는 대괄호에 인덱스를 입력한다.
let a = [1, 2, 3, 4, 5];
let first = a[0];
let second = a[1];
유효하지 않은 인덱스를 입력하면 런타임 에러가 발생한다.
thread 'main' panicked at 'index out of bounds: the len is 5 but the index is 10', src/main.rs:19:19
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace