DaleSchool

변수와 값

입문15분

학습 목표

  • let으로 변수를 선언할 수 있다
  • mut 키워드로 가변 변수를 만들 수 있다
  • 불변 변수에 재할당하면 컴파일 에러가 발생함을 안다
  • println!에서 변수 값을 출력할 수 있다

동작하는 코드

아래 코드를 Rust Playground에서 실행해보세요!

fn main() {
    let name = "DaleSchool";
    let year = 2026;

    println!("사이트 이름: {name}");
    println!("올해는 {year}년이에요");
}

let으로 변수를 만들고, println! 안에서 {변수명} 형태로 값을 출력할 수 있어요.

이번에는 값을 바꾸는 코드를 볼게요.

fn main() {
    let mut score = 0;
    println!("처음 점수: {score}");

    score = 10;
    println!("변경 후 점수: {score}");
}

변수 앞에 mut을 붙이면 값을 나중에 바꿀 수 있어요.

직접 수정하기

아래 코드를 실행해보세요. 에러가 나요!

fn main() {
    let x = 5;
    println!("x = {x}");

    x = 6; // 여기서 에러!
    println!("x = {x}");
}

에러가 나는 이유를 짐작해보세요. 그다음, let 옆에 mut을 붙여서 에러를 해결해보세요.

"왜?" — 왜 값을 못 바꾸게 할까요?

Rust에서 변수는 기본적으로 불변(immutable) 이에요. 한 번 값을 넣으면 바꿀 수 없어요.

"그게 왜 좋은 건가요?"라고 생각할 수 있어요. 코드가 길어지면 어디서 값이 바뀌었는지 추적하기 어려워져요. Rust는 안전을 위해 기본적으로 값을 바꿀 수 없게 해요. 바꾸고 싶으면 mut을 붙이면 돼요.

println!에서 변수를 출력하는 방법은 두 가지예요.

fn main() {
    let age = 20;

    // 방법 1: 중괄호 안에 변수명 직접 쓰기
    println!("나이: {age}살");

    // 방법 2: 중괄호 비워두고 뒤에 변수 전달하기
    println!("나이: {}살", age);
}

둘 다 같은 결과예요. 편한 방식을 사용하세요!

심화 학습

섀도잉 — 같은 이름으로 새 변수 만들기

Rust에서는 같은 이름의 변수를 let으로 다시 선언할 수 있어요. 이걸 섀도잉(shadowing) 이라고 해요.

fn main() {
    let x = 5;
    let x = x + 1;
    let x = x * 2;

    println!("x = {x}"); // 12
}

mut과 다른 점은 매번 새로운 변수를 만드는 거예요. mut 없이도 값을 "바꾸는 것처럼" 보이게 할 수 있어요. 자세한 차이는 나중에 배울 거예요.

아래 코드를 실행하면 컴파일러가 에러를 알려줘요.

fn main() {
    let x = 5;
    x = 6;
}

에러 메시지:

error[E0384]: cannot assign twice to immutable variable `x`
 --> src/main.rs:3:5
  |
2 |     let x = 5;
  |         - first assignment to `x`
3 |     x = 6;
  |     ^^^^^ cannot assign twice to immutable variable

해석: "불변 변수 x에 두 번 값을 넣을 수 없어요"라는 뜻이에요. let mut x = 5;로 바꾸면 해결돼요.

컴파일러가 실수를 미리 알려준 거예요! 에러 메시지를 잘 읽으면 해결 방법이 보여요.

  1. 변수 temperaturemut으로 선언하고, 처음에는 20을 넣은 뒤 25로 바꿔서 두 값을 모두 출력해보세요.
  2. 좋아하는 음식 이름을 변수에 저장하고, println!으로 "제가 좋아하는 음식은 {변수명}이에요!"를 출력해보세요.

Q1. 아래 코드의 실행 결과는 무엇일까요?

fn main() {
    let mut count = 3;
    count = 7;
    println!("{count}");
}
  • A) 3
  • B) 7
  • C) 컴파일 에러
  • D) 37

Q2. 변수를 선언할 때 값을 나중에 바꾸고 싶으면 어떤 키워드를 써야 할까요?

  • A) var
  • B) let
  • C) mut
  • D) change

Q3. 아래 코드는 정상적으로 실행될까요?

fn main() {
    let city = "서울";
    let city = "부산";
    println!("{city}");
}
  • A) 에러가 난다
  • B) "서울"이 출력된다
  • C) "부산"이 출력된다
  • D) 둘 다 출력된다