-
[Rust] 3. 변수, 데이터타입rust 2023. 1. 26. 13:21반응형
https://doc.rust-lang.org/book/ch03-00-common-programming-concepts.html
변수, 데이터타입, 함수, 반복문, 조건문 에대한 내용이며 복습용으로 정리하는 글이다.
변수
> 변수는 기본적 let 으로 선언하며 immutable 하다 . 재할당이 예상되는 경우 mut 키워드를 통해서 선언하면된다.
- rust compiler 는 이런 특징으로 코드를 추론하기 더 쉽게 만든다.
> const 로도 선언 할수 있는데 역시 immutable 하지만 mut 키워드를 사용할수 없는 차이가 있으며 전역범위에서 선언할수 있는 차이가 있다.
> shadowing
- 같은 변수 이름으로 재선언 하는 것을 shadowing 이라고 한다.
- mut 키워드와 차이는 재선언시에는 기존타입과 다른 타입으로도 할당이 가능하다는 점이다.
let spaces = " "; let spaces = spaces.len(); let mut spaces = " "; spaces = spaces.len(); // error[E0308]: mismatched types
data type
> data type은 scalar 형과 compound형 두가지로 구분 할수있다.
> rust는 정적 타입의 언어이며 이는 컴파일단계에서 모든 변수의 타입에 대해서 알아야 한다는 것을 의미한다.
> rust는 대부분의 경우 타입추론이 가능하지만 타입이 변화가 가능한 몇몇 케이스에서는 타입을 명시해줘야 한다.
let guess: u32 = "42".parse().expect("Not a number!");
> scalar type
- integer : 8bit, 16bit, 32bit, 64bit, 128bit, i8,u8, i16, u16 ... i128, u128
부호가 필요없는 경우 usize type 를 사용하고 부호가 필요한 경우 isize type 를 사용한다. ex) i8 = -2^7 ~ 2^7-1, u8 = 0 ~ 2^8-1
- floating : f32, f64(default) 최신 cpu에서는 거의 같은 속도이지만 더정밀한 f64를 기본형으로 한다.
fn main() { let x = 2.0; // f64 let y: f32 = 3.0; // f32 }
- bool : true or false 크기 1byte
- char : 알파벳 하나 or 이모티콘 or 한국어 중국어 악센트 문자 를 나타매며 표현할때는 작은따옴표를 사용해야한다. 두글자 이상은 문자형으로 취급한다
> compound type
- tuple : 다양한 유형을 하나의 복합유형으로 그룹화 하는 방법이다.
fn main() { let tup = (500, 6.4, 1); let (x, y, z) = tup; let five_hundred = tup.0; println!("{five_hundred}"); println!("The value of y is: {y}"); }
위와 같이 구조분해해서 사용할수도 있고 인덱스로 접근해서 사용할수도 있다.
- array : 동일한타입 의 고정된 길이의 모음을 나타낼때 사용한다. 배열은 데이터를 힙이 아닌 스택에 할당할때 유용하다. 요소의 길이를 유동적으로 사용하고자 할경우에는 vector를 사용해야 한다.
let a = [1, 2, 3, 4, 5]; let first = a[0]; let second = a[1]; let b = [3; 5]; // [3, 3, 3, 3, 3] let c: [i32; 5] = [1, 2, 3, 4, 5];
a 와 같이 인덱스로 엑세스 할수 있으나 유효하진 않은 인덱스로 접근하는 경우 런타임시 에러가 나올수 있기때문에 주의해야한다.
b 와 같이 [요소; 길이] 형태로 간편하게 배열을 생성할수있다.
c 와 같이 [타입; 길이] 형태로 타입을 지정해줄수 있다.
'rust' 카테고리의 다른 글
[Rust] 4. ownership(2).함수와 ownership (0) 2023.01.28 [Rust] 4. ownership(1). ownership, 변수와 ownership (0) 2023.01.28 [Rust] 2.programing guessing game (0) 2023.01.25 [Rust] 1.getting started (1) 2023.01.25 [Rust] rust를 배워보기로한 이유 (0) 2023.01.23