rust

[Rust] 3. 변수, 데이터타입

승딱 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 와 같이 [타입; 길이] 형태로 타입을 지정해줄수 있다.