774 단어
4 분
변수
IMPORTANT

이 강좌는 기본적으로 c/cpp나 python 같은 프로그래밍 언어를 해봤다는 가정하에 작성되었습니다

특이한 변수#

러스트의 변수는 좀 특이합니다.

기본적으로 변하지 않는(immutable) 성질을 가지고 있으며 특정 키워드를 사용하여 변할 수 있게 바꿔줘야 합니다.

왜 변수인데 변하지 않아?#

Rust는 **동시성(concurrency)**에서도 안전성을 보장합니다. 여러 스레드가 같은 값을 참조할 때, 그 값이 immutable 하면 록(lock) 없이도 안전하게 공유할 수 있습니다.

→ 이는 데이터 레이스(data race)1 를 원천적으로 막아줍니다.

변수 문법#

rust에서 변수는 let 키워드를 사용하여 선언할 수 있습니다.

main.rs
let 변수명: 타입어노테이션 = 값;

보통 이와 같이 쓰이며, 타입 어노테이션은 굳이 넣지 않아도 러스트가 알아서 유추한 다음 넣어줍니다(rust analyzer에서 어떤 타입을 넣었는지 확인할 수 있으며 더블클릭을 눌러 자동으로 입력할 수 있습니다.)

변수 변하게 하기#

mut 키워드를 사용하여 값은 변할 수 있게(mutable) 바꿔줄 수 있습니다

main.rs
fn main() {
let mut a = 1;
println!("변하기전값: {a}");
a = 2;
println!("변한후값: {a}");
}

간단한 문제 풀어보기!#

파일을 다운로드할 때의 평균 속도(average rate)를 r이라 하고, 다운로드하는 데 걸린 시간(time)을 t라고 할 때, 다운로드한 파일의 용량은 r × t로 계산할 수 있습니다.

다운로드 속도가 초당 800kB이고 다운로드하는 데 걸린 시간이 110초라고 할 때, 다운로드한 파일의 크기는 몇 MB일까요? 단, 1MB = 1000kB로 계산합니다.

답 확인하기
main.rs
fn main() {
let r = 800;
let t = 110;
println!("{}", r * t / 1000);
// {}안에 특수문자를 사용할수 없기때문에 println!("{r * t / 1000}")이런식으로는 사용할수 없습니다
}

.


Footnotes#

  1. 여러 스레드가 동시에 하나의 변수에 접근해서 값을 바꾸면, 서로 엉켜서 어떤 값이 나올지 알 수 없게 됩니다. 이런 상황을 “데이터 레이스” 라고 해요!