- 러스트에서 변수는 기본적으로 변경이 불가능
- 러스트는 불변성을 기본으로 하기 때문
- 필요한 경우에는 변경 가능한 변수로 선언할 수 있음.
- 예제
fn main() {
let x = 5;
println!("x의 값: {}", x);
}
터미널에서 cargo run을 실행하면, x의 값: 5이라고 정상적으로 출력된다.
fn main() {
let x = 5;
println!("x의 값: {}", x);
x = 6;
println!("변경된 x의 값: {}", x);
}
터미널에서 cargo run을 실행하면, 다음과 같은 에러 메시지와 함께 컴파일을 할 수 없다는 컴파일러 에러가 발생한다.
러스트는 컴파일러 차원에서 이와 같이 친절하게 에러의 원인과 해결을 위한 도움말까지 제공해준다.
error[E0384]: 불변 변수 x에 두번 할당할 수 없다.
도움말: 재할당을 하고 싶으면 변수 x에 첫 번째 할당을 할 때 x를 가변 변수로 선언하라. - mut x
도움말에 따라 코드를 수정해보자.
fn main() {
let mut x = 5;
println!("x의 값: {}", x);
x = 6;
println!("변경된 x의 값: {}", x);
}
다시 터미널에서 cargo run을 실행하면,
x의 값: 5
변경된 x의 값: 6
이라고 정상적으로 출력된다.
- 상수
- 상수는 선언된 범위 내에서 항상 유효함.
- 하드코드된 값에 상수로 이름을 지정하여 해당 값의 의미를 표시하기 위한 용도로 사용할 수 있음.
- 상수에는 mut 키워드를 사용할 수 없음. 즉 항상 불변임.
- 변수는 let 키워드를 통해 선언하는 반면, 상수는 const 키워드를 사용하여 선언해야 하고 타입도 반드시 지정해줘야 함.
- 상수에는 함수 호출의 결과나, 런타임 연산을 통해 얻은 값을 할당할 수 없음. 반드시 상수 표현식을 사용하여 할당해야 함.
- 러스트에서 상수 이름을 지을 땐 대문자를 사용하며, 언더바(_)를 통해 구분함.
const HAPPY_MONDAY: bool = false;
- 변수 가리기
- 이미 선언한 변수와 똑같은 이름의 변수를 let 키워드를 이용하여 다시 선언할 수 있음.
- 이전에 선언한 변수는 이후에 선언한 변수에 가려짐. (shadowed)
- cf.) mut 키워드를 이용하는 방법
- mut 키워드를 이용하는 방법과 달리, 변수 가리기를 통해 새로 변경된 값은 여전히 불변임.
- 변수 가리기를 사용하면 이전에 선언한 변수와 다른 타입의 변수를 선언할 수 있지만, mut 키워드를 이용할 경우에는 처음 선언한 값과 동일한 타입의 값만 재할당할 수 있음.
fn main() {
let a = 1;
let a = a * 2;
let a = a * 10;
println!("a의 값은 ... {}", a); // a의 값은 ... 20
let a = "hi";
println!("a의 값은 ... {}", a); // a의 값은 ... hi
}
fn main() {
let mut x = 5;
println!("x의 값: {}", x);
x = 6;
println!("변경된 x의 값: {}", x);
// x = "hi";
// mismatched types - expected integer, found `&str` - rustc(E0308)
}
참고
https://rinthel.github.io/rust-lang-book-ko/ch02-00-guessing-game-tutorial.html
'학습 내용 > Rust' 카테고리의 다른 글
[일반 프로그래밍 개념] 데이터 타입 - 2. 컴파운드 타입 (0) | 2022.05.29 |
---|---|
[일반 프로그래밍 개념] 데이터 타입 - 1. 스칼라 타입 (0) | 2022.05.24 |
macOS에서 rust-analyzer 세팅 (0) | 2022.05.22 |
[숫자 맞히기 게임 만들기] 정답 맞힐 때까지 다중 입력 지원하기 + 올바르지 않은 입력 처리하기 (0) | 2022.03.09 |
[숫자 맞히기 게임 만들기] 난수와 사용자 입력 비교하기 (0) | 2022.02.15 |