러스트 프로그래밍 튜토리얼 3 -1장

cardia·2022년 6월 29일
1

rust의 공식 문서를 참조해 작성함 https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html

Variables and Mutability

변수는 기본적으로 immutable 이지만 그러나 mut 선언을 해주면 바뀔 수 있다.

fn main() {
    let mut x = 5;
    println!("The value of x is: {}", x);
    x = 6;
    println!("The value of x is: {}", x);
}

Constants

러스트에서 상수는 다른 언어와 같이 불변, const를 통해 선언
선언 시 변수나 다른 컴파일 시에 변할 수 있는 값을 통해서는 선언할 수 없다.
주로 대문자로 변수명을 설정한다.

const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;

Shadowing

러스트는 변수의 쉐도잉을 지원한다.

fn main() {
    let x = 5;
    let x = x + 1; //shadowing x= 5+1= 6
    {
        let x = x * 2; //두번째 shawdowing x = 6*2 =12
        println!("The value of x in the inner scope is: {}", x);
    } // scope안의 x가 밖으로 나가서 x는 다시 6
    println!("The value of x is: {}", x);
}

Output

The value of x in the inner scope is: 12
The value of x is: 6

Mut와의 차이점은 변수 타입을 바꿀 수 있다는 점이며 쉐도잉을 통해 변수명을 재사용할 수 있다는 장점이 있다.

Data Types

러스트는 statically typed language 로 컴파일러는 컴파일을 할 시점에 존재하는 모든 변수의 type을 알아야 한다. 단일 변수를 나타내는 scalar와 다수의 변수들이 묶여있는 compound data type이 있다.

Scalar Type

Integer

크게 부호가 있는 signed Integer와 없는 unsigned로 나뉘며 각각 i,u로 표현한다. 나타낼 수 있는 범위는 8-bit에서 128-bit까지로 i8, i128 로 선언한다.

Integer Overflow

디버그 모드일 때 overflow가 나타난다면 panic과 함께 멈추지만 release 플래그로 컴파일하고 있다면 two’s complement wrapping으로 값이 0부터 다시 시작한다. 예를 들어, 0에서 255까지의 범위를 저장할 수 있는 u8 type에서 256은 0, 257은 1로 바뀐다.

Floating Type

floting type에는 f32, f64 두 개가 있으며 둘 다 signed이며 둘의 속도 차이는 거의 없다고 한다. 디폴트는 f64이다.

The Boolean Type

bool로 선언되는 true, false를 표현할 수 있는 타입이며 크기는 1바이트이다.

The Character Type

러스트의 char 타입은 아스키가 아닌 Unicode Scalar Value로 표현되며 크기는 4바이트이다.

fn main() {
    let c = 'z';
    let z = 'ℤ';
    let heart_eyed_cat = '😻';
}

Compound Types

compound type은 다수의 값들을 한 타입으로 표현할 수 있으며 러스트의 compound 타입에는 tuple과 array가 있다.

Tuple

fn main() {
    let tup: (i32, f64, u8) = (500, 6.4, 1);
    let (x, y, z) = tup; // destructuring,
    let six_point_four = tup.1;
}

tuple은 다양한 타입의 변수들을 묶을 때 사용되며 한번 선언되면 길이가 바뀔 수 없다. Destructing이나 . 을 통한 인덱싱을 통해 변수를 가져올 수 있다.

The Array Type

tuple과 달리 array 타입은 같은 타입의 변수들만 묶을 수 있으며 다른 언어와 달리 길이가 고정되 있는 type이다. array 타입의 데이타는 stack 영역에 저장된다.

fn main() {
    let a = [1, 2, 3, 4, 5];
    let a: [i32; 5] = [1, 2, 3, 4, 5]; //i32타입의 정수 5개
    let a = [3; 5]; // [3,3,3,3,3]
}

array 안의 각각의 값들은 인덱싱을 통해 얻을 수 있고 만약 범위 밖의 값을 인덱싱하게 되면 panic 에러를 일으킨다.

0개의 댓글

관련 채용 정보