- 러스트는 정적 타입 언어
- 정적 타입 언어: 컴파일 시점에 모든 변수의 타입이 결정되어야 함.
- 동적 타입 언어: 런타임에 자료형이 동적으로 결정됨.
- 데이터 타입의 두 가지 부분집합
- 스칼라(Scalar) 타입: 하나의 값을 표현
- 컴파운드(Compound) 타입: 하나의 타입으로 여러 개의 값을 그룹화한 타입
스칼라 타입
1. 정수(integer)
2. 부동 소수점 숫자(floating point numbers)
3. 불리언(boolean)
4. 문자(characters)
정수(integer)
- 소수점 없는 숫자
- 정수 타입 중 부호가 있는 것은 i로 시작하고, 부호가 없는 것은 u로 시작
- 예: i16 / u32
- 부호가 있고 없고의 차이는 음수를 저장할 수 있는지 아닌지의 차이
- 러스트의 각 정수 타입에는 크기가 정해져 있음.
크기 | 부호 있음 | 부호 없음 |
8bit | i8 | u8 |
16bit | i16 | u16 |
32bit | i32 | u32 |
64bit | i64 | u64 |
arch | isize | usize |
- 부호 있으면 다음 두 값 사이의 값들을 보관할 수 있음.
- 부호 없으면 다음 두 값 사이의 값들을 보관할 수 있음.
- isize, usize는 프로그램 실행 중인 컴퓨터의 아키텍쳐 환경에 따라 크기가 달라지며, 컬렉션 타입의 인덱스를 참조할 때 주로 사용함.
- 정수 기본 타입은 i32로, 일반적으로 가장 빠름.
부동 소수점 타입(floating point numbers)
- 러스트에는 소수점 가진 숫자를 처리하는 다음의 두 가지 타입의 부동 소수점 타입이 있음. (부동 소수점 숫자는 IEEE754 표준에 따라 표현)
- f32 (32bit 크기) : 단정도(single-precision) 부동 소수점
- f64 (64bit 크기) : 배정도(double-precision) 부동 소수점
- 러스트는 이 중 f64를 기본 타입으로 규정
- 대부분의 CPU에선 f64가 빠르면서도 정확도도 더 높다고 함.
- 소수점 가진 숫자 처리할 때 따로 타입 명시하지 않으면 기본적으로 f64 타입으로 추론됨.
fn main() {
let x = 2.0; // f64
let y: f32 = 3.0; // f32
println!("{} {}", x, y);
}
사칙 연산
- 러스트는 모든 숫자 타입에 대해 기본적인 사칙연산 지원
fn main() {
/* 사칙 연산 */
let sum = 1 + 1;
println!("1 더하기 1은? = {}", sum); // 2
let diff = 352.2 - 17.7;
println!("{}", diff); // 334.5
// let product = 2 * 2.3;
// cannot multiply `{integer}` by `{float}` - rustc(E0277)
let product = 2.0 * 2.3;
println!("{}", product); // 4.6
let remainder = 20 % 3;
println!("{}", remainder); // 2
}
불리언 타입(boolean)
- bool 키워드를 이용하여 불리언 타입 선언
- true, false
- 1byte 크기
문자 타입(characters)
유니코드 및 char 타입 관련 흥미로운 글... (러스트 뿐만 아니라 프로그래밍 언어 전반..)
http://www.itmoa.co.kr/gzboard.php?code=techqna&mode=gz_read&Page=6&no=194
fn main() {
/* char 타입 */
let mut example = 'a';
println!("{} b c d e...", example); // a b c d e...
example = '😻';
println!("{}: 야옹~", example); // 😻: 야옹~
}
- 러스트의 char 타입
- 문자 하나를 표현
- 4byte 크기
- 유니코드 스칼라값이라서 ASCII보다 많은 문자 표현 가능 (이모지까지 쌉가능)
- U+0000부터 U+D7FF, U+E000부터 U+10FFFF까지의 값 포함
- 예제 코드에서 알 수 있듯이, 앞서 살펴본 문자열 리터럴은 큰따옴표("")로 표현하는 반면, char 리터럴은 작은따옴표('')로 표현함.
참고
https://rinthel.github.io/rust-lang-book-ko/ch03-00-common-programming-concepts.html
'학습 내용 > Rust' 카테고리의 다른 글
[일반 프로그래밍 개념] 데이터 타입 - 2. 컴파운드 타입 (0) | 2022.05.29 |
---|---|
[일반 프로그래밍 개념] 변수 (0) | 2022.05.23 |
macOS에서 rust-analyzer 세팅 (0) | 2022.05.22 |
[숫자 맞히기 게임 만들기] 정답 맞힐 때까지 다중 입력 지원하기 + 올바르지 않은 입력 처리하기 (0) | 2022.03.09 |
[숫자 맞히기 게임 만들기] 난수와 사용자 입력 비교하기 (0) | 2022.02.15 |