Rust 변수
변수(variable)는 나중에 쓰려고 값에 붙여 두는 이름이에요. 이름표가 붙은 상자라고 생각해 보세요. 상자에 무언가를 넣고 이름을 적어 두면, 값을 여기저기 반복해서 쓰는 대신 그 이름으로 부를 수 있어요.
변수 만들기
섹션 제목: “변수 만들기”Rust에서는 let 키워드로 변수를 만들어요.
fn main() { let age = 30; println!("제 나이는 {age}살이에요");}실행 결과:
제 나이는 30살이에요이 줄을 하나씩 뜯어볼게요.
let: Rust에게 “새 변수를 만들 거예요”라고 알려 줘요.age: 우리가 고른 이름이에요.=: 오른쪽의 값을 왼쪽의 이름에 대입해요.30: 저장할 값이에요.
println! 안의 {age}는 변수의 값을 출력해요. 이걸 문자열 보간(string interpolation)이라고 해요. Rust가 {age} 자리를 age에 들어 있는 값으로 바꿔 넣어 줘요.
타입은 Rust가 알아서 알아내요
섹션 제목: “타입은 Rust가 알아서 알아내요”Rust의 모든 값에는 타입(type)이 있어요. 정수, 텍스트, true/false 같은 것들이요. 타입을 직접 선언해야 할 것 같지만, 보통은 그럴 필요가 없어요. Rust가 값을 보고 타입을 알아내거든요. 이걸 타입 추론(type inference)이라고 해요.
fn main() { let score = 95; // Rust가 정수라고 추론해요 let name = "Ferris"; // Rust가 텍스트라고 추론해요 let is_active = true; // Rust가 불리언이라고 추론해요 println!("{name}: {score}점, 활성 = {is_active}");}실행 결과:
Ferris: 95점, 활성 = true타입을 명시하고 싶다면 콜론 뒤에 타입을 쓰면 돼요.
let score: i32 = 95; // i32 = 32비트 정수변수는 기본적으로 불변이에요
섹션 제목: “변수는 기본적으로 불변이에요”다른 언어를 쓰다 온 사람들이 놀라는 부분이 여기예요. Rust에서는 변수에 한 번 값을 정하면, 기본적으로 바꿀 수 없어요. “불변”(immutable)은 그냥 바꿀 수 없다는 뜻이에요.
이 코드는 컴파일되지 않아요.
fn main() { let count = 1; count = 2; // ❌ 에러: 불변 변수에 두 번 대입할 수 없어요 println!("{count}");}컴파일러가 분명한 메시지로 막아 줘요.
error[E0384]: cannot assign twice to immutable variable `count`“불변 변수 count에 두 번 대입할 수 없다”는 뜻이에요.
왜 일부러 이렇게 만들었을까요? 예상하지 못한 순간에 값이 바뀌어서 생기는 버그가 아주 많기 때문이에요. 바꾸겠다고 요청하지 않는 한 값을 바꿀 수 없게 해서, Rust는 코드를 더 예측하기 쉽게 만들어 줘요. 제약이 아니라 기능이에요.
mut로 바꿀 수 있는 변수 만들기
섹션 제목: “mut로 바꿀 수 있는 변수 만들기”값이 정말로 바뀌어야 한다면 mut 키워드를 붙이세요(mutable, 즉 가변의 줄임말이에요).
fn main() { let mut count = 1; println!("변경 전: {count}");
count = 2; // ✅ 이제 허용돼요. `mut` 덕분이에요 println!("변경 후: {count}");}실행 결과:
변경 전: 1변경 후: 2섀도잉: 같은 이름 다시 쓰기
섹션 제목: “섀도잉: 같은 이름 다시 쓰기”Rust에서는 기존 변수와 같은 이름으로 새 변수를 선언할 수 있어요. 이걸 섀도잉(shadowing)이라고 해요. 새 변수가 이전 변수 위에 “그림자를 드리운다”는 뜻이에요.
fn main() { let x = 5; let x = x + 1; // 이전 x를 바탕으로 만든 새 x -> 6 let x = x * 2; // 또 다른 새 x -> 12 println!("x의 값은 {x}");}실행 결과:
x의 값은 12mut와 비슷해 보이지만 달라요.
mut는 같은 변수의 값을 바꿔요.- 섀도잉은 이름만 같을 뿐인 완전히 새로운 변수를 만들어요. 그래서 타입이 달라져도 괜찮아요.
섀도잉은 값을 변환하면서도 같은 이름을 계속 쓰고 싶을 때 편리해요.
fn main() { let spaces = " "; // 텍스트 let spaces = spaces.len(); // 이제는 숫자예요 (공백이 몇 개인지) println!("공백 개수: {spaces}");}실행 결과:
공백 개수: 3상수(constant)는 절대 바뀌지 않고 컴파일할 때 정해지는 값이에요. let 대신 const로 선언하고, 타입을 반드시 써야 해요.
const MAX_SCORE: u32 = 100;
fn main() { println!("최고 점수는 {MAX_SCORE}점이에요");}실행 결과:
최고 점수는 100점이에요관례상 상수 이름은 UPPER_SNAKE_CASE로 써요. 일반 변수와 비교하면 이래요.
let 변수 |
const 상수 |
|
|---|---|---|
| 바꿀 수 있나요? | mut가 있을 때만 |
절대 안 돼요 |
| 타입을 써야 하나요? | 선택 (추론됨) | 필수 |
| 이름 스타일 | snake_case |
UPPER_SNAKE_CASE |
| 쓸 수 있는 곳 | 함수 안 | 어디든, 함수 밖에서도 |
1분이 몇 초인지, 최대 한도가 얼마인지처럼 정말로 고정된 값에 상수를 쓰세요.
이름 짓는 규칙
섹션 제목: “이름 짓는 규칙”snake_case를 쓰세요. 소문자 단어를 밑줄로 이어요:user_name,total_price.- 이름에는 문자, 숫자, 밑줄을 쓸 수 있지만, 숫자로 시작할 수는 없어요.
- 무엇인지 알 수 있는 이름을 고르세요.
a보다age가 좋아요.
연습 문제
섹션 제목: “연습 문제”1. 레벨 업
섹션 제목: “1. 레벨 업”1에서 시작하는 변수 level을 만드세요. 출력한 다음 1씩 두 번 올리고, 바꿀 때마다 출력해서 레벨 1, 레벨 2, 레벨 3이 나오게 해 보세요. 힌트: 바뀌는 값에는 mut가 필요하고, level = level + 1;로 1을 더할 수 있어요.
정답 보기
fn main() { let mut level = 1; println!("레벨 {level}");
level = level + 1; println!("레벨 {level}");
level = level + 1; println!("레벨 {level}");}실행 결과:
레벨 1레벨 2레벨 32. 분을 초로 바꾸기
섹션 제목: “2. 분을 초로 바꾸기”60으로 정한 상수 SECONDS_PER_MINUTE를 선언하세요. let time = 5;(분 단위)로 시작해서, time을 섀도잉해 같은 시간을 초 단위로 담고, 300초예요를 출력해 보세요. 힌트: 새 time은 이전 time으로 만들 수 있어요: let time = time * ...;
정답 보기
const SECONDS_PER_MINUTE: u32 = 60;
fn main() { let time = 5; // 분 let time = time * SECONDS_PER_MINUTE; // 새 `time`, 이제 초 단위예요 println!("{time}초예요");}실행 결과:
300초예요mut는 필요 없어요. 두 번째 let이 이름만 다시 쓰는 완전히 새로운 변수를 만들거든요. 그리고 time이 u32 상수와 곱해지기 때문에, Rust는 여기서 time이 u32라고 추론해요.
let으로 변수를 만들어요. 보통은 Rust가 타입을 추론해 줘요.- 변수는 기본적으로 불변이에요. 바꿀 수 있게 하려면
mut를 붙여요. - 섀도잉은
let으로 같은 이름을 다시 선언해서 새 변수를 만드는 거예요(타입이 달라져도 돼요). - 상수(
const)는 절대 바뀌지 않고, 항상 타입이 필요하고,UPPER_SNAKE_CASE로 써요.
이해도 점검
섹션 제목: “이해도 점검”이해도 점검
1. Rust에서 let 변수에 기본적으로 값을 다시 대입할 수 있을까요?
2. Rust의 섀도잉이란 무엇일까요?
3. 이 페이지에 따르면 Rust 변수 이름은 어떤 스타일을 쓸까요?
점수: 0 / 3
더 알아보기
섹션 제목: “더 알아보기”- 변수와 가변성 - 러스트 프로그래밍 언어:
let,mut, 상수, 그리고 왜 불변이 기본인지 다루는 공식 장이에요. - 섀도잉 - 러스트 프로그래밍 언어: 값의 타입을 바꾸는 경우를 포함해서, 섀도잉이
mut와 어떻게 다른지 더 자세히 알려 줘요. - Variable Bindings — Rust by Example (영어): 짧은 실행 예제와 함께 가변성, 스코프와 섀도잉으로 이어지는 내용이 있어요.
- Constants — Rust by Example (영어): 작은 프로그램으로
const(와 사촌 격인static)를 보여 줘요. let키워드 — 표준 라이브러리 문서 (영어):let으로 할 수 있는 모든 것을 정리했어요. 전체 그림이 궁금할 때 보세요.