ABOUT ME

-

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

     

Designed by Tistory.