let은 기본적인 변수 선언입니다.
예를 들어, let a = 1;을 하면 값이 1인 변수 a가 정의됩니다.
그러나 let으로 선언된 변수는 대입이 불가능해 값을 변경할 수 없습니다.
이를 immutable하다고 합니다.
mut는 변수가 값을 변경할 수 있게 만들어주는 예약어입니다.
예를 들어, let mut a = 1;을 하면, 값을 변경할 수 있는 변수 a가 정의되고, 그 값은 1이 됩니다.
이렇게 값을 변경할 수 있는 변수를 mutable하다고 합니다.
const는 값을 변경할 수 없다는 점에서, let과 비슷합니다.
그러나 두 가지의 차이점이 있습니다.
- let과는 달리 선언시 자료형을 지정해주어야 합니다.
- 선언시 대입하는 값은 상수여야 합니다.
(함수의 반환값처럼, 런타임 시 달라질 수 있는 동적인 값은 불가능)
섀도잉(Shadowing)은 마지막에 선언한 변수로 앞서 선언된 변수를 가리는 것을 말합니다.
let a = 1; let a = 2; let a = 3; 이런 식으로 같은 이름의 변수를 여러 번 정의하면,
이후 코드에서 a를 참고할 때 가장 마지막에 선언된 3을 참조합니다.
예시)
let country = "대한민국";
let country_ref = &country;
let country = 8;
println!("{} {}", country_ref, country);
출력되는 값은 대한민국과 8입니다.
const HIGH_SCORE: i32 = 20;
const를 사용할 때는 자료형을 정확히 명시해야하고 변수명을 대문자로 쓰는 것이 관례입니다.
static LOW_SCORE: i32 = 0;
static에 mut를 사용할 수 있지만 안전성이 낮아집니다.
(정적변수에 값을 변경할 수 있는 mut를 주었기 때문입니다.)