좋은 질문입니다. Rust에서 불변 변수(immutable variable)와 상수(constant)는 비슷해 보이지만, 용도와 동작 방식이 분명히 다릅니다.
| 항목 | 불변 변수 (let) | 상수 (const) |
|---|---|---|
| 선언 키워드 | let | const |
| 변경 가능 여부 | 기본은 불변 (단, mut로 가변 가능) | 절대 변경 불가 |
| 초기화 시점 | 런타임에 평가 가능 | 반드시 컴파일 타임에 평가되어야 함 |
| 타입 명시 | 선택사항 | 반드시 타입 명시 필요 |
| 사용 가능 위치 | 함수 내부, 외부 모두 가능 | 전역 또는 함수 내부 모두 가능 |
| 할당 값 | 런타임 계산 가능 | 오직 상수 표현식만 가능 |
| 메모리 위치 | 스택에 할당되거나 최적화됨 | 고정된 주소, 이식 가능한 바이너리 일부 |
let)fn main() {
let x = 5; // 불변 변수
// x = 6; // ❌ 에러: 변수는 변경할 수 없음
let mut y = 10; // 가변 변수
y = 20; // ✅ 가능
}
const)const MAX_USERS: u32 = 1000;
fn main() {
println!("최대 사용자 수: {}", MAX_USERS);
}
const는 반드시 타입을 명시해야 합니다: u32, &'static str, 등const는 항상 컴파일 타임에 결정되는 정적인 값만 가능예: const PI: f64 = std::f64::consts::PI; ✅
그러나 const NOW: u64 = get_current_time(); ❌ (함수 호출은 안 됨)
| 상황 | 추천 방식 |
|---|---|
| 런타임에 값 계산이 필요한 경우 | let 사용 |
| 컴파일 타임에 고정된 값, 전역 설정 등 | const 사용 |
| 값이 절대 바뀌지 않고 프로그램 전체에서 공유됨 | const 사용 |
| 함수 내부에서만 쓰이고 값이 변하지 않음 | let 사용 |
let 불변 변수: 런타임에 초기화 가능, 함수 지역에서도 유용const 상수: 컴파일 타임에 반드시 결정되어야 하며, 항상 불변이 둘은 용도와 시점이 다르므로, 상황에 맞게 구분해서 사용하는 것이 중요합니다.
원하시면 static 변수와 const의 차이도 추가로 설명드릴 수 있습니다.