- 변수는 기본적으로 immutable이다.
- mutable하게 하고싶다면
mut
를 추가해야 한다. - 이런 Rust의 특징은 변수에 할당된 값이 의도치 않게 변경되어 생기는 버그를 방지해 준다.
fn main() {
let default_val = 5; // immutable
let mut mutable_val = 5; // mutable
}
- 상수는 기본적으로 immutable이고 항상 immutable이다.
const CONSTANT_VAL: u32 = 123;
-
상수를 선언할 때는
mut
를 함께 사용할 수 없다. -
할당할 값의 타입이 반드시 지정되어야 한다 (type of the value must be annotated)
-
상수는 글로벌 스코프를 포함한 모든 스코프에서 선언할 수 있다.
-
변수는 immutable이지만 shadowing을 통해서 값을 바꿀 수도 있다.
fn main() {
let x = 5;
let x = x + 1; // 6
{
let x = x * 2; // 12
}
// x is 6 again
let x = "a string"; // ok
let mut y = 6;
y = "another string" // compile ERROR
}
- shadowing은
mut
와는 다른데, shadowing을 해서 변수에 할당된 값을 바꿀 수 있지만, 바뀐 값은 immutable하다.mut
로 선언된 변수는 항상 mutable하다. - shadowing을 통해서 기존 변수에 다른 타입의 값을 할당할 수 있다.
mut
를 사용할 때 기존 변수에 다른 타입의 값을 할당하면 컴파일 에러가 발생한다.mut
는 변수의 타입을 변경하진 못한다.