이 시리즈는 Rust Book을 공부하고 정리한 문서입니다. 댓글로 많은 조언 부탁드립니다.
Rust Book: https://doc.rust-lang.org/book/
https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html
https://rinthel.github.io/rust-lang-book-ko/ch03-01-variables-and-mutability.html
rust 에서 변수를 선언하면 기본적으로 변경이 불가능한 immutable 하다. 이것은 러스트 의도인데 mutable 한 변수는 동시성 문제와 안정성 문제라는 오류를 많이 일으킬 가능성이 높기 때문이다. rust 는 immutable한 변수를 사용하기를 권장한다. 그래서 변수를 선언할때 따로 mut
키워드를 사용하기 전까지는 기본적으로 변수가 immutable한 이유이다.
immutable은 쉽게 얘기해서 read-only 와도 같다.
fn main() {
let x = 5;
println!("The value of x is: {}", x);
x = 6;
println!("The value of x is: {}", x);
}
cannot assign twice to immutable variable x
라는 에러메시지와함께 빌드자체가 불가능하다.
변수에 값을 변경하기 위해서는 mutable 하다는 키워드를 명시해야한다.
let mut x = 5;
immutable 변수는 C언어의 constant
와는 다르다.
mut
을 사용할수 없다. 상수는 설정으로 변경할수 있는게 아니라 언제나 불변이다. let
이 아닌 const
키워드로 선언해야한다.상수의 유효범위는 {}
범위 내이다.
상수는 모두 대문자 사용 권장. 하드코딩할 값을을 사용.
const MAX_POINTS: u32 = 100_000;
똑같은 변수 명을 여러차례 걸쳐서 선언. 가령 변수 x를 쉐도우해보자. 아래 첫번째 변수 x 는 두번째 변수 x에 의해 쉐도잉 되었다(shadowed). 라고 표현한다. let
키워드를 활용하여 반복하여 같은 변수명으로 변수를 쉐도잉 할 수 있다.
let x = 5;
let x = x + 1;
let x = x * 2;
println!("The value of x is: {}", x);
쉐도잉은 mut
을 사용해서 값을 변경하는것과는 다르다. 쉐도잉으로 값을 몇변 변경가능하지만 결과적으로 변수는 immutable 속성을 갖기 때문이다.
또다른 장점은 데이터 타입을 바꿀때 보다 심플하게 사용 가능하다는것. 같은 변수명을 활용해 타입을 변경하는것이 가능하다. 예를 들어 spaces 변수에 " "
문자열의 스페이스 갯수를 저장하려고 할때 mutable 변수를 사용하면 아래와 같이 작성할수있지만 변수의 타입이 다르기 때문에 빌드 에러가 발생한다.
let mut spaces = " ";
spaces = spaces.len();
그럴때 쉐도잉을 사용하면 아래와같이 같은 변수명으로 새로운타입의 변수값을 바인딩하여 사용할 수 있다. (불필요한 중간단계의 임시변수들을 없앨수 있을듯?)
let spaces = " ";
let spaces = spaces.len();