Rust

Rust 변수의 가변성(mutable)과 상수(const)

초코민트냠냠 2022. 10. 7. 12:44
반응형

변수

Rust에서 변수는 기본적으로 불변(immutable)입니다. 러스트에서는 안정성을 추구하는데 그것을 위해서 변수는 기본적으로 불변으로 하였습니다. 

 

그래서 한번 선언된 변수의 값을 바꾸려고 하면 컴파일 오류가 발생합니다.

다음 예시코드를 봅시다.

 

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

 

이 코드를 컴파일하려고 하면 다음과 같은 에러코드가 뜹니다.

 

immutable x

 

이렇듯 let으로 생성된 변수는 기본적으로 불변이기 때문에 변수의 값을 변경하려면 mut 키워드를 사용하여 변경 가능한 변수라는 것을 명시해야 합니다.

 

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

 

let mut x = 5; 로 바꾸고 실행해봅시다.

 

let mut x = 5;

 

상수

앞서서 봤던 변경 불가능한 변수처럼 상수(constant)도 불변입니다. 하지만 위의 변수와는 몇가지 차이점이 있습니다.

 

우선 mut 키워드를 사용할 수 없습니다. 그리고 데이터타입을 지정해줘야 합니다.

 

예를 들면 다음과 같이 쓸 수 있습니다.

 

const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;

 

Shadowing(덮어쓰기)

숫자 맞추기 게임에서 geuss 변수에서처럼 같은 이름의 변수를 덮어쓸 수 있습니다.

[2 - 2] Rust 간단한 숫자 맞추기 게임

 

[2 - 2] Rust 간단한 숫자 맞추기 게임

지난글에 이어서 랜덤 정수를 만들어보겠습니다. 랜덤 정수 생성하기 Rust 크레이트(Crate)를 사용하여 외부 라이브러리 가져오기 Rust 크레이트(Crate)를 사용하여 외부 라이브러리 가져오기 러스트

supern0va.tistory.com

 

이는 변수 이름만 같지만 완전히 새로운 변수를 만드는 것입니다.

다음 예시코드를 봅시다.

 

fn main() {
    let spaces = "   ";
    let spaces = spaces.len();
}

처음 spaces는 문자열 타입이지만 shadowing하여 만든 두번째 spaces는 정수 타입입니다.

 

let mut과의 차이점은 변경 가능한 변수인 let mut을 사용하면 값은 변경할 수 있지만 데이터타입이 다른 값으로는 변경할 수 없습니다.

 

let mut spaces = "   ";
spaces = spaces.len(); // error: mismatched types
반응형