C.W.K.
Stream
Lesson 04 of 06 · published

변수, 가변성 & 섀도잉

~11 min · foundations, variables, mutability, shadowing

Level 0Rust 호기심러
0 XP0/80 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete

Python 이나 JavaScript 에서 오면 Rust 의 첫 진짜 충격이 이거야: 변수는 기본이 불변. let x = 5; 는 못 바꾸는 값을 묶어. 바꾸고 싶어? mut 으로 opt-in 해야 해.

let 과 mut

let x = 5; 는 고정이야. let mut x = 5; 는 재할당 가능하고. 이거 관료주의가 아니야 — 대부분의 값은 바뀌면 안 되니까 불변이 기본이고, 컴파일러는 안정적이라고 아는 것에 대해 훨씬 공격적으로 추론할 수 있어. 변형이 일어나는 자리에 정확히 표시하니까 읽는 사람도 한눈에 봐.

const — 컴파일 타임 상수

const MAX: u32 = 100_000; 은 진짜 상수야: 항상 불변, 타입 표기 필수, 컴파일 타임에 계산돼. 개념상 영원히 고정인 값 (한계치, 변환 계수) 엔 const, 지역적인 건 전부 let.

섀도잉 — 같은 이름, 새 값

옛 변수랑 같은 이름으로 새 변수를 선언할 수 있어. 이건 변형이 아니야 — 이전 걸 가리는 완전히 새 바인딩이고, 타입까지 바꿀 수 있어. 좋은 이름 하나를 유지하면서 값을 단계별로 변형하는 관용적 방법이야.

기본 불변은 제약이 아니라 기능이야. 정확히 뭐가 바뀌는지 표시하게 밀어붙이는데, 그게 미래의 독자랑 컴파일러의 옵티마이저가 제일 필요로 하는 정보거든.

타입 추론

Rust 는 정적 타입인데 굳이 말하라고 안 해. let x = 5;i32 로 추론돼. 컴파일러가 못 알아낼 때 (문자열을 숫자로 파싱한다든가) 나 명확함을 위해 명시하고 싶을 때만 annotation 달아.

Code

let, mut, const, 그리고 섀도잉·rust
const MAX_POINTS: u32 = 100_000; // 컴파일 타임 상수, 타입 필수

fn main() {
    let x = 5;        // 불변
    // x = 6;         // error[E0384]: 불변 변수에 두 번 할당 불가

    let mut score = 0; // 변형으로 opt-in
    score += 10;       // 괜찮음

    // 섀도잉: 새 바인딩, 타입까지 바꿀 수 있어
    let spaces = "   ";          // &str
    let spaces = spaces.len();   // 이제 usize — 같은 이름, 새 값
    println!("{score} {spaces} {MAX_POINTS}");
}

External links

Exercise

섭씨 온도를 문자열 "23.5" 로 시작해. 섀도잉으로 같은 이름 temp 를 세 번 다시 묶어: (1) 문자열, (2) 파싱한 숫자, (3) 화씨로 변환한 값. 세 단계 내내 이름 하나만 써.
Hint
각 단계가 let temp = ...; 로 이전 temp 를 가려. 타입이 &str -> f64 -> f64 로 흐르는 게 바로 섀도잉의 쓸모야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고
💛 by 똘이warm

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.