변수 상수 섀도잉 불변성 가변 mut let
변수
변수 선언 방법
여러 가지 변수 선언 방법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| // 기본적인 변수 선언 방법
let sentence = "Sentence 1";
println!("{sentence}");
>> Sentence 1
// 명시적 타입 어노테이션
let some_number : u32 = 198;
println!("{some_number}");
>> 198
// 변수는 기본적으로 불변성(immutable) 을 가짐
sentence = "Sentence 2";
println!("{sentence}");
>> 에러 발생
// 변수를 다시 선언할 수 있게 하려면 mut 지시어를 사용
let mut mutable_sentence = "Sentence 3";
mutable_sentence = "Sentence 4";
println!("{mutable_sentence}");
>> Sentence 4
|
코드 작성을 완료하고 디버깅하려면 터미널에 cargo run
명령어를 입력해 실행한다.
변수 생성 후 값 할당
1
2
3
4
5
| // 기본적인 변수 생성
let mut sentence = String::new(); // String 타입의 변수 생성
sentence = "Sentence 1".to_string(); // 값을 할당
println!("{sentence}");
>> Sentence 1
|
.to_string() 을 한 이유 :
sentence 는 String 타입이고, “Sentence 1” 은 &str 타입.
이것과 관련해서는 추후에 소유권과 메모리 관리 방식에서 다시 알아본다.
불변성 (muitable)
불변성이란
- Rust 에서 변수의 불변성이란, 기본적으로 값을 할당받은 뒤엔 변경될 수 없는 특성을 가리킴
- 이는 안정성과 쉬운 동시성을 갖기 위한 의도적인 특성임
mut
지시어를 사용하면 변수를 가변 변수로 만들 수 있음.
불변성
- 일반적인 불변 변수를 선언하고, 값 재할당을 시도하면 에러가 발생한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| let sentence = "Sentence 1";
sentence = "Sentence 2";
>> error[E0308]: mismatched types
>> --> src/main.rs:14:16
>> |
>>13 | let sentence = String::new();
>> | ------------- expected due to this value
>>14 | sentence = "Sentence 1";
>> | ^^^^^^^^^^^^- help: try using a conversion method: >>`.to_string()`
>> | |
>> | expected `String`, found `&str`
>>
>> For more information about this error, try `rustc --explain E0308`.
>> error: could not compile `tt` (bin "tt") due to 1 previous error
|
가변성
- 가변 변수로 만들기 위해서는
mut
지시어를 사용한다.
1
2
3
4
5
| let mut sentence = "Sentence 1";
sentence = "Sentence 2";
println!("{sentence}");
>> Sentence 2
|
왜 불변성이라는 특성이 존재하는가?
- 안정성 : 끝까지 값을 유지하려던 변수를 나중에 변경해버리면 버그로 이어질 수 있음.
- Rust 는 불변성이라고 지정한 상황에 대한 보증을 수행
상수
상수 개념
- 상수(constant) 는 값을 절대 변경할 수 없는 것.
- 불변 변수는
mut
이 가능하지만, 상수는 가변으로 만들 수 없다.
- 선언시
const
키워드를 사용한다.
- 선언 후의 계산에 의해 값이 결정돼서는 안된다. 즉, 런타임(실행 환경)에서만 계산될 수 있는 결과값은 안되며, 바로 값을 알 수 있어야 한다.
- 보통 상수의 이름은 전체를 대문자와 언더바로 구성한다.
상수의 선언
1
2
3
4
| const THREE_HOURS_IN_SECOND: u32 = 60*60*3;
println!("{THREE_HOURS_IN_SECOND}");
>> 10800
|
상수의 특성
- 선언된 스코프 내에서 프로그램이 동작하는 전체 시간 동안 유효함
- 따라서, 점수의 최고값이나 빛의 속도와 같이 프로그램의 여러 부분에서 알 필요가 있는 값에 유용함
- 또한, 전역적으로 사용하게 되면 나중에 업데이트될 하드코딩된 값을 한 군데에서 변경 가능
섀도잉 (Shadowing)
섀도잉 (Shadowing)
- 새 변수를 이전 변수명과 같은 이름으로 선언하는 방법
- 첫 번째 변수가 두 변째 변수에 가려졌다(Shadowed) 고 하여 섀도잉이라고 부름
- 동일 변수명을 다시 사용해 값을 할당할 때
let
키워드를 사용함으로써 섀도잉을 할 수 있다.
에시
- 이미 선언된 변수명과 동일한 이름으로 변수를 선언할 때
let
키워드를 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| let x = 5;
println!("First x value : {x}");
let x = x + 1;
println!("Second x value : {x}");
{
let x = x + 2;
println!("Lat x value : {x}");
}
>> First x value : 5
>> Second x value : 6
>> Lat x value : 8
|
- 이미 선언된 변수와 다른 타입의 변수로 만들 수도 있다.
1
2
3
4
5
6
7
8
| let x = 5;
println!("First x value : {x}");
let x = "Alter Sentence";
println!("Lst x value : {x}")
>> First x value : 5
>> Lst x value : Alter Sentence
|
Reference
https://doc.rust-kr.org/ch02-00-guessing-game-tutorial.html
https://doc.rust-kr.org/ch03-01-variables-and-mutability.html