동작하는 코드
아래 코드를 Rust Playground에서 실행해보세요!
fn main() {
let temperature = 30;
if temperature >= 30 {
println!("더워요! 아이스커피 마시러 가요 ☕");
} else if temperature >= 20 {
println!("딱 좋은 날씨예요!");
} else {
println!("따뜻하게 입으세요!");
}
// 1부터 5까지 출력
for i in 1..=5 {
println!("{i}번째 반복!");
}
}
if 뒤에 조건을 쓰고, 조건이 맞으면 {} 안의 코드가 실행돼요. C나 Java와 달리 괄호를 쓰지 않아도 돼요.
for는 범위(range)를 순회해요. 1..=5는 1부터 5까지, 1..5는 1부터 4까지예요.
직접 수정하기
temperature값을15로 바꿔보세요. 어떤 메시지가 나오나요?1..=5를0..3으로 바꿔보세요. 몇 번 반복되나요?
"왜?" — if는 값을 만들 수 있어요
Rust의 if는 다른 언어와 다른 점이 있어요. 값을 반환하는 표현식(expression) 이에요!
fn main() {
let score = 85;
let grade = if score >= 90 {
"A"
} else if score >= 80 {
"B"
} else {
"C"
};
println!("점수: {score}, 등급: {grade}");
}
신기하죠? if의 결과를 바로 변수에 넣을 수 있어요. 이때 각 분기의 마지막 값이 반환값이 돼요. 세미콜론(;)을 붙이지 않는 게 포인트예요 — 함수에서 값을 반환할 때와 같은 규칙이에요.
Rust에는 세 가지 반복문이 있어요.
| 반복문 | 언제 쓸까요? |
| ------- | -------------------------------------- |
| for | 횟수가 정해져 있을 때 (가장 자주 사용) |
| while | 조건이 참인 동안 반복할 때 |
| loop | 무한 반복 + break로 빠져나올 때 |
fn main() {
// while: 조건이 참인 동안 반복
let mut count = 3;
while count > 0 {
println!("{count}!");
count -= 1;
}
println!("발사!");
// loop: 무한 반복 + break
let mut sum = 0;
loop {
sum += 1;
if sum >= 10 {
break;
}
}
println!("합계: {sum}");
}
심화 학습
while과 loop, 뭐가 다른가요?
while은 조건을 먼저 검사하고 반복해요. loop은 일단 무조건 실행하고 break로 빠져나와요.
loop만의 특별한 능력이 있어요 — break에 값을 붙여서 반환할 수 있어요!
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 5 {
break counter * 10; // 50을 반환
}
};
println!("결과: {result}");
}
for나 while로는 이렇게 할 수 없어요. 반복을 돌면서 어떤 값을 찾아야 할 때 loop이 유용해요.
continue — 건너뛰기
break가 반복을 완전히 멈추는 거라면, continue는 현재 반복만 건너뛰고 다음으로 넘어가요.
fn main() {
for i in 1..=10 {
if i % 3 == 0 {
continue; // 3의 배수는 건너뛰기
}
println!("{i}");
}
}
실행하면 3, 6, 9가 빠진 채로 출력돼요.
if를 표현식으로 쓸 때 주의할 점이 있어요. 각 분기의 타입이 같아야 해요.
fn main() {
let value = if true {
5
} else {
"안녕" // 에러! i32와 &str 타입이 다름
};
}
에러 메시지:
error[E0308]: `if` and `else` have incompatible types
--> src/main.rs:4:9
|
2 | let value = if true {
| _________________-
3 | | 5
| | - expected because of this
4 | | } else {
5 | | "안녕"
| | ^^^^^^ expected integer, found `&str`
해석: "if와 else의 타입이 맞지 않아요"라는 뜻이에요. 한쪽은 숫자, 한쪽은 문자열이면 Rust가 무슨 타입으로 저장해야 할지 모르겠죠? 같은 타입으로 맞춰주면 해결돼요.
- 1부터 100까지의 숫자 중에서 FizzBuzz를 만들어보세요.
- 3의 배수이면
"Fizz"출력 - 5의 배수이면
"Buzz"출력 - 3과 5의 공배수이면
"FizzBuzz"출력 - 그 외에는 숫자 출력
- 힌트:
%연산자로 나머지를 구하고, 공배수 조건을 먼저 검사하세요!
- 3의 배수이면
- 2단부터 9단까지의 구구단을
for중첩으로 출력해보세요. (for dan in 2..=9 { for i in 1..=9 { ... } })
Q1. 아래 코드의 실행 결과는 무엇일까요?
fn main() {
let x = 7;
let label = if x % 2 == 0 { "짝수" } else { "홀수" };
println!("{label}");
}
- A) 짝수
- B) 홀수
- C) 컴파일 에러
- D) 아무것도 출력되지 않는다
Q2. for i in 0..5는 몇 번 반복할까요?
- A) 4번
- B) 5번
- C) 6번
- D) 무한
Q3. loop 안에서 반복을 멈추려면 어떤 키워드를 사용할까요?
- A)
stop - B)
exit - C)
break - D)
return