2장에서 언급했듯이, 기본 변수는 불변성입니다. 이것은 Rust가 제공하는 안전성과 손쉬운 동시성이라는 장점을 취할 수 있도록 코드를 작성하게끔 강제하는 요소 중 하나입니다. 하지만 여전히 당신은 가변 변수를 사용하고 싶을테죠. 어떻게 그리고 왜 Rust에서 불변성을 애호해주길 권장하는지 알아보면 그런 생각을 포기할 수 있을지도 모르겠습니다.
let x = 5; // 불변성 변수(기본)
let mut y = 4; // 가변성 변수
let
: Rust의 변수 선언문let x = 5; 불변성 변수
x = 6; // error[E0384]: re-assignment of immutable variable `x`
Rust에서는 컴파일러가 변경되지 않은 값(immutable)에 대한 보증을 해주고, 실제도 이 값은 바뀌지 않는다. 이것이 의미하는 바는 불변성 변수를 작성할 때 값이 어떻게 변경되는지 추적할 필요가 없기 때문에 코드를 더 합리적으로 만들어준다.
그래도 가변성 변수는 코딩에 필수적이다. 이때, let met
으로 가변성 변수를 선언할 수 있다.
fn main() {
let mut x = 5;
x = 6;
println!("value: {}", x); // value: 6
}
mut
을 사용하여, x
에 bind된 값을 5에서 6으로 변경할 수 있다.
다음의 예제 코드는 앞서 선언한 변수와 같은 이름의 새 변수를 선언한다. 이를 첫 변수가 두 번째 변수에 의해 shadowed됐다고 표현한다.
fn main() {
let x = 5;
let x = x + 1;
let x = x * 2;
println!("value: {}", x); // value: 12
}
이와 같은 사용은 변수를 mut
으로 선언하는 것과 차이가 있다. let
을 사용하지 않고서는 변수에 새 값을 대입할 수 없기 때문이다. 또 다른 mut
과 shadowing의 차이는 let
키워드를 다시 사용하여 효과적으로 새 변수를 선언하고, 값의 유형을 변경하면서도 동일 이름을 사용할 수 있다는 점이다.
let num = 5; // u32
let num = '5'; // char