변수의 가변성#
let#
Rust에서 변수를 선언할 때 다음과 같이 let 키워드를 사용합니다.
fn main() {
let apple = 10;
}하지만, let 은 기본적으로 불변(immutable)이기 때문에, 다음처럼 apple의 값을 변경하려고 하면 에러가 발생합니다.
fn main() {
let apple = 10;
apple = 20;
}error[E0384]: cannot assign twice to immutable variable `apple`let mut#
값을 수정하기 위하여 다음과 같이 let mut 키워드를 사용해야 합니다.
여기서, mut는 mutable을 의미합니다.
fn main() {
let mut apple = 10;
apple = 20;
}변수를 사용할 때 가변(mutable)과 불변(immutable)을 명확히 구분하는 이유는 Human error를 줄이고, 가독성 개선, 디버깅 효율성 개선, SW 품질 보장 등의 장점을 가질 수 있습니다.
Shadowing#
Rust에서는 다음과 같이 첫 번째 변수 apple이 두 번째 변수 apple에 가려진 것을 Shadowing 이라 표현합니다.
apple 변수를 사용할 때 2번째 apple을 바라보게 됩니다.
fn main() {
let apple = 1;
let apple = 2;
}다음 코드처럼 Inner scope(중괄호) 에서 apple이 Shadowing되는데, 이것은 Inner scope 안에서만 유효합니다.
fn main() {
let apple = 1;
let apple = 2;
{
let apple = 3;
println!("@@@ apple: {apple}");
}
println!("### apple: {apple}");
}다음은 실행된 결과 입니다.
Inner scope 에서는 @@@ apple: 3 이 출력되고, Inner scope를 빠져나가면 ### apple: 2 가 출력됩니다.
@@@ apple: 3
### apple: 2Shadowing 되면서 변수의 Type이 변경될 수 있습니다.
다음 코드는 apple 변수가 integer type에서 string으로 변경되었습니다.
fn main() {
let apple = 1;
let apple = "semonan";
}constant#
다음 코드에서 let 기반 불변 변수 apple과 const기반 상수 banana는 값을 변경할 수 없다는 점에서 유사하지만, 다른 점이 분명히 있습니다.
fn main() {
let apple = 1;
const banana:u32 = 2;
}- 상수는
mut과 함께 사용할 수 없습니다. - 상수는 프로그램이 실행되는 동안 절대로 값이 변경될 수 없습니다.
- 상수를 생성할 때 값의 Type이 반드시 명시되어야 합니다.