Rust에서 사용되는 데이터 타입에 대해 알아보겠습니다.
데이터 타입은 크게 스칼라와 컴파운드라는 두 종류로 나누어질 수 있습니다.
스칼라
스칼라는 하나의 값으로 표현되는 타입들입니다.
여기에 포함되는 데이터 타입은 정수형, 부동소수점 숫자, boolean, 그리고 문자입니다.
정수형
정수형 데이터타입은 사용되는 비트 수, 부호의 유무에 따라 나누어집니다. 각각 부호의 유무는 i, u로 비트 수는 뒤에 8, 16, 32, 64와 같이 나누어지며 size 같은 경우는 사용자의 컴퓨터 환경에 따라 달라집니다. 컴퓨터가 32-bit, 64-bit 아키텍처인지에 따라 32비트 또는 64비트를 사용하게 됩니다.
일반적으로는 i32를 사용하는 것이 가장 좋은 선택입니다.
부동 소수점
Rust에서 소수점을 갖는 부동 소수점을 표현하기 위한 데이터 타입은 f32, f64가 있습니다. 정수형과 마찬가지로 32와 64는 변수의 크기를 정합니다. 다른 언어에서의 float, double을 생각하시면 좋을 것 같습니다.
데이터 타입을 정의 하지 않고 변수를 선언할 때의 기본 타입은 f64입니다.
fn main() {
let x = 2.0; // f64
let y: f32 = 3.0; // f32
}
Boolean
Boolean 타입의 사용은 bool로 표현되며 true 또는 false 값 중 하나만을 가질 수 있습니다.
fn main() {
let t = true;
let f: bool = false;
}
문자
문자 타입은 char로 표현되며 문자열과 다르게 작은따옴표(')가 사용된다는 것에 주의하세요.
fn main() {
let c = 'z';
let z = 'ℤ';
let heart_eyed_cat = '😻';
}
또한 Rust에서는 유니코드를 사용함으로써 아스키코드보다 더 많은 표현(이모지 등)이 가능합니다.
컴파운드
컴파운드에는 배열(Array)과 튜플(Tuple)이 있습니다.
튜플
fn main() {
let tup: (i32, f64, u8) = (500, 6.4, 1);
}
튜플은 여러 개의 서로 다른 타입의 데이터를 저장할 수 있습니다.
튜플은 다음과 같이 사용할 수 있습니다.
fn main() {
let tup = (500, 6.4, 1);
let (x, y, z) = tup;
println!("The value of y is: {}", y);
}
tup의 저장된 데이터들을 각각 x, y, z에 저장할 수 있습니다.
fn main() {
let x: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;
}
또한 튜플의 각 데이터에 접근하기 위해서는 튜플이름.인덱스 로 접근이 가능합니다.
배열
배열은 튜플과는 다르게 배열에 저장할 데이터는 모두 같은 데이터 타입을 가지고 있어야 합니다.
그리고 다른 언어들과는 다르게 배열의 크기는 선언됨과 동시에 고정됩니다.
fn main() {
let a = [1, 2, 3, 4, 5]; //선언 방법 1
let b:[i32; 100] = [0;100]; //선언 방법2 [데이터타입;배열크기] = [초기화값; 배열크기];
let c:[i32;3] = [1,2,3]; //선언 방법3
}
배열에 대한 접근은 배열이름[인덱스]로 접근할 수 있습니다.
fn main() {
let a = [1, 2, 3, 4, 5];
let first = a[0];
let second = a[1];
let slice_a = &a[1..3]; //배열 슬라이스
}
배열은 고정된 크기로 사용되기 때문에 일반적으로는 라이브러리에 포함된 벡터(Vector)를 사용하는 것이 좋습니다. 벡터는 차후에 따로 다루겠습니다.
'Rust' 카테고리의 다른 글
[Rust] 소유권(Ownership) (0) | 2022.04.19 |
---|---|
[Rust] 구조체 (0) | 2022.04.18 |
[Rust] 제어문(조건문, 반복문) (0) | 2022.04.12 |
[Rust] 변수 가변성(Mutability) (0) | 2022.04.11 |
[Rust] 함수 (0) | 2022.04.10 |