콘텐츠로 이동

Rust if...else

if를 쓰면 프로그램이 결정을 내릴 수 있어요. 조건에 따라 이 코드 블록을 실행할지, 저 코드 블록을 실행할지 고르는 거예요.

fn main() {
let age = 20;
if age >= 18 {
println!("투표할 수 있어요");
}
}
▶ 직접 실행해 보기

다른 언어를 쓰다 온 분들이 자주 걸려 넘어지는 부분이 두 가지 있어요.

  • 조건을 괄호로 감싸지 않아요. if (age >= 18)이 아니라 if age >= 18이에요.
  • 조건은 반드시 진짜 bool이어야 해요. if age(숫자)는 컴파일되지 않아요. if age != 0처럼 써야 해요.
fn main() {
let age = 15;
if age >= 18 {
println!("투표할 수 있어요");
} else {
println!("아직 나이가 부족해요");
}
}
▶ 직접 실행해 보기
fn main() {
let score = 72;
if score >= 90 {
println!("학점: A");
} else if score >= 75 {
println!("학점: B");
} else if score >= 60 {
println!("학점: C");
} else {
println!("학점: F");
}
}
▶ 직접 실행해 보기

예상대로 Rust는 위에서부터 차례로 조건을 확인하고, 처음으로 맞는 조건의 블록을 실행해요.

많은 언어에는 없지만 Rust에는 있는 기능이 있어요. 바로 if가 값을 만들어 낼 수 있다는 거예요. 그래서 let의 오른쪽에 if를 쓸 수 있어요.

fn main() {
let age = 20;
let status = if age >= 18 { "성인" } else { "미성년자" };
println!("{status}");
}
▶ 직접 실행해 보기

함수에서 값을 반환할 때와 똑같은 방식이에요. 각 분기의 값 뒤에는 세미콜론을 붙이지 않아요. 지켜야 할 조건은 하나뿐이에요. 두 분기 모두 같은 타입의 값을 만들어야 해요(여기서는 둘 다 &str이에요).

if 안에 또 다른 if를 넣을 수도 있어요. 잘 동작하지만, 두세 단계만 깊어져도 읽기가 어려워져요. 이럴 때는 논리 연산자 &&(그리고)와 ||(또는)로 조건을 이어 붙이는 방법이 있어요.

fn main() {
let temperature = 22;
let is_raining = false;
// 중첩: 동작은 하지만 코드가 점점 오른쪽으로 밀려나요
if temperature > 15 {
if !is_raining {
println!("중첩: 산책하러 가요");
}
}
// 같은 검사를 조건 하나로
if temperature > 15 && !is_raining {
println!("조합: 산책하러 가요");
}
// ||는 둘 중 하나만 참이어도 참이에요
if temperature < 0 || temperature > 35 {
println!("집에 있어요");
} else {
println!("날씨가 좋아요");
}
}

실행 결과:

중첩: 산책하러 가요
조합: 산책하러 가요
날씨가 좋아요
▶ 직접 실행해 보기

안쪽 블록이 추가로 하는 일이 있거나 안쪽에 자기만의 else가 있다면 중첩도 여전히 괜찮아요. 하지만 바깥 if가 안쪽 if를 지켜 주는 역할만 한다면, &&로 같은 뜻을 더 간단하게 표현할 수 있어요. 숫자가 어떤 범위 안에 있는지 확인하려면 temperature >= 15 && temperature <= 25라고 쓰세요. Rust에서는 15 <= temperature <= 25라고 쓸 수 없어요.

숫자 n = 7을 저장하세요. if를 식으로 써서 변수 kind에 "짝수" 또는 "홀수"를 넣고, 7은 홀수예요를 출력하세요. 힌트: n % 2 == 0이면 짝수예요.

정답 보기
fn main() {
let n = 7;
let kind = if n % 2 == 0 { "짝수" } else { "홀수" };
println!("{n}은 {kind}예요");
}

실행 결과:

7은 홀수예요
▶ 직접 실행해 보기

어떤 영화관은 12세 미만 어린이에게 5달러, 65세 이상에게 7달러, 그 밖의 모든 사람에게 12달러를 받아요. age에 70을 저장하고, if / else if / else 식 하나로 price를 계산해서 티켓: 7달러를 출력하세요. 힌트: 모든 분기가 숫자를 돌려줘야 하고, 전체 if 식은 마지막 } 뒤에 세미콜론으로 끝나요.

정답 보기
fn main() {
let age = 70;
let price = if age < 12 {
5
} else if age >= 65 {
7
} else {
12
};
println!("티켓: {price}달러");
}

실행 결과:

티켓: 7달러
▶ 직접 실행해 보기
  • if 조건 { ... }에는 괄호가 필요 없고, 조건은 bool이어야 해요.
  • else if로 검사를 더 이어 붙이고, else로 나머지 경우를 처리해요.
  • if 안에 if를 중첩하는 대신 &&와 ||로 조건을 이어 붙일 수 있어요.
  • if는 값을 만드는 식으로 쓸 수 있어요. 두 분기의 타입이 같아야 하고, else가 꼭 있어야 해요.

이해도 점검

1. Rust의 if 조건에 꼭 필요한 것은 무엇인가요?

2. let과 함께 if를 식으로 쓸 때, 두 분기가 지켜야 할 것은 무엇인가요?

점수: 0 / 2