[rust] 데이터 타입들
4 min readJan 12, 2020
- rust 는 타입이 고정된 언어입니다. 즉, 모든 변수의 타입이 컴파일시에 정해져 있어야 한다는 것입니다.
- 타입은 스칼라와 컴파운드, 둘로 나눌 수 있습니다.
스칼라 타입들
스칼라는 하나의 값으로 표현되는 타입입니다.
rust 는 정수형, 부동소수점 숫자, boolean, 문자, 네 가지 스칼라 타입을 보유하고 있습니다.
- 정수형
- 소수점이 없는 숫자
- u32 타입인 정수형: 부호 없는 32 비트 변수임을 나타냅니다. (부호 있는 타입은 u 대신 i 로 시작합니다.)
- 부호 혹은 미부호의 의미는, 숫자가 양수 혹은 음수를 다룰 수 있는지 혹은 없는지를 나타냅니다.
다르게 말하면, 숫자가 부호를 가져야 하는 경우(부호) 혹은 오직 양수만을 가질 것이기에 부호가 없이도 표현할 수 있는가(미부호)를 나타냅니다. - 확실하게 정해진 경우가 아니면 Rust의 기본 값인 i32가 일반적으로 는 좋은 선택입니다. 이는 일반적으로 가장 빠르기 때문이죠.
- 부동 소수점 타입
- 소수점을 갖는 숫자인 부동소수점 숫자를 위한 두 가지 기본 타입도 있습니다.
- Rust의 부동소수점 타입은 f32와 f64로, 각기 32bit와 64bit의 크기를 갖습니다.
- 기본 타입은 f64
- 수학적 연산들.
- Rust가 지원하는 일반적인 기본 수학적 연산은 모든 숫자 타입에 적용됩니다: 더하기, 빼기, 곱하기, 나누기 등등.
- Boolean 타입
- boolean 타입은 Rust에서 둘 중 하나의 값만 갖을 수 있습니다: true와 false.
- boolean 타입은 러스트에서 bool로 명시됩니다.
- 문자 타입
- Rust의 char는 이 언어의 가장 근본적인 알파벳 타입이고, 스트링이 큰따옴표를 쓰는 것에 반하여 char 타입은 작은따옴표로 사용합니다.
- Rust의 char타입은 Unicode Scalar를 표현하는 값이고 이는 ASCII 보다 많은 표현을 가능하게 합니다. 억양 표시가 있는 문자, 한국어/중국어/일본어 표의 문자, 이모티콘, 넓이가 0인 공백문자 모두가 Rust에서는 char타입으로 사용할 수 있습니다.
복합 타입들
- 복합 타입들은 다른 타입의 다양한 값들을 하나의 타입으로 묶을 수 있습니다. Rust는 두 개의 기본 타입들을 갖고 있습니다:
- 튜플과 배열.
- 튜플: 값들을 집합시켜서 튜플화하기.
- 튜플은 다양한 타입의 몇 개의 숫자를 집합시켜 하나의 복합 타입으로 만드는 일반적인 방법입니다.
- 우리는 괄호 안에 콤마로 구분되는 값들의 목록을 작성하여 튜플을 만듭니다.
fn main() {
let tup: (i32, f64, u8) = (500, 6.4, 1);
}
튜플은 단일 요소를 위한 복합계로 고려되었기에 변수 tup에는 튜플 전체가 bind 됩니다. 개별 값을 튜플의 밖으로 빼내오기 위해서는, 패턴 매칭을 사용하여 튜플의 값을 구조해체 시키면 됩니다.
fn main() {
let tup = (500, 6.4, 1); let (x, y, z) = tup; println!("The value of y is: {}", y);
}
자바스크립트의 비구조화 할당과 비슷합니다.
패턴 매칭을 통한 구조해체에 추가로, 우리는 마침표(.) 뒤에 우리가 접근하길 원하는 값의 색인을 넣는 것을 통해 튜플의 요소에 직접적으로 접근할 수 있습니다. 예제를 봅시다:
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;
}
위의 프로그램은 튜플 x를 만들고, 이의 각 요소들을 그들의 색인을 통해 접근하여 새 변수를 만듭니다. 대부분의 언어가 그렇듯이, 튜플의 첫 번째 색인은 0 입니다.
- 배열
- 배열의 모든 요소는 모두 같은 타입이여야 합니다.
- Rust에서는 배열은 고정된 길이를 갖는다는 점입니다: 한번 선언되면, 이들은 크기는 커지거나 작아지지 않습니다.
- 배열 요소에 접근하기
- 배열은 stack에 단일 메모리 뭉치로 할당됩니다. 우리는 색인을 통해 배열의 요소에 접근할 수 있습니다. 이렇게요:
fn main() {
let a = [1, 2, 3, 4, 5]; let first = a[0];
let second = a[1];
}