
IMPORTANT이 강좌는 기본적으로 c/cpp나 python 같은 프로그래밍 언어를 해봤다는 가정하에 작성되었습니다
특이한 변수
러스트의 변수는 좀 특이합니다.
기본적으로 변하지 않는(immutable) 성질을 가지고 있으며 특정 키워드를 사용하여 변할 수 있게 바꿔줘야 합니다.
왜 변수인데 변하지 않아?
Rust는 **동시성(concurrency)**에서도 안전성을 보장합니다. 여러 스레드가 같은 값을 참조할 때, 그 값이 immutable 하면 록(lock) 없이도 안전하게 공유할 수 있습니다.
→ 이는 데이터 레이스(data race)1 를 원천적으로 막아줍니다.
변수 문법
rust에서 변수는 let
키워드를 사용하여 선언할 수 있습니다.
let 변수명: 타입어노테이션 = 값;
보통 이와 같이 쓰이며, 타입 어노테이션
은 굳이 넣지 않아도 러스트가 알아서 유추한 다음 넣어줍니다(rust analyzer에서 어떤 타입을 넣었는지 확인할 수 있으며 더블클릭을 눌러 자동으로 입력할 수 있습니다.)
변수 변하게 하기
mut
키워드를 사용하여 값은 변할 수 있게(mutable) 바꿔줄 수 있습니다
fn main() { let mut a = 1; println!("변하기전값: {a}");
a = 2; println!("변한후값: {a}");}
간단한 문제 풀어보기!
파일을 다운로드할 때의 평균 속도(average rate)를 r이라 하고, 다운로드하는 데 걸린 시간(time)을 t라고 할 때, 다운로드한 파일의 용량은 r × t로 계산할 수 있습니다.
다운로드 속도가 초당 800kB이고 다운로드하는 데 걸린 시간이 110초라고 할 때, 다운로드한 파일의 크기는 몇 MB일까요? 단, 1MB = 1000kB로 계산합니다.
답 확인하기
fn main() { let r = 800; let t = 110; println!("{}", r * t / 1000); // {}안에 특수문자를 사용할수 없기때문에 println!("{r * t / 1000}")이런식으로는 사용할수 없습니다}
.
Footnotes
-
여러 스레드가 동시에 하나의 변수에 접근해서 값을 바꾸면, 서로 엉켜서 어떤 값이 나올지 알 수 없게 됩니다. 이런 상황을 “데이터 레이스” 라고 해요! ↩