# if, else if, else

if, else if, else 구문은 어떤 조건이 참인지 거짓인지에 따라 프로그램의 실행 경로를 분기하기 위해 사용된다. Rust에서는 조건 부분이 반드시 bool 타입이어야 하며, 다른 언어처럼 0이나 null 같은 값으로 거짓을 표현하는 방식은 허용되지 않는다. 즉, 조건식 자체가 true 또는 false를 명시적으로 반환해야 한다. 이 점은 Rust가 컴파일 단계에서 잠재적인 논리적 오류를 방지하는 데 도움이 된다.

if 구문은 기본적으로 조건식이 true일 때만 내부 블록을 실행한다. else 키워드를 함께 사용하면 조건식이 false일 경우에 대비한 블록을 작성할 수 있다. 추가로 else if 구문을 사용하면 여러 조건을 순차적으로 확인할 수 있으며, 각 조건에 부합하는 블록이 하나라도 실행되면 나머지 조건은 더 이상 확인되지 않는다. 이 때 조건을 효율적으로 구성하여 불필요한 계산이 발생하지 않도록 주의해야 한다.

아래는 if, else if, else를 사용하는 기본 구조이다.

```
fn main() {
    let 점수 = 85;

    if 점수 >= 90 {
        println!("A 학점이다.");
    } else if 점수 >= 80 {
        println!("B 학점이다.");
    } else if 점수 >= 70 {
        println!("C 학점이다.");
    } else {
        println!("D 학점 이하이다.");
    }
}
```

위 코드는 점수가 90 이상이면 A 학점을, 그 외에 80 이상이면 B 학점, 70 이상이면 C 학점, 그 외에는 D 학점 이하라는 문구를 출력하도록 한다. 각 조건식은 평가 후 true인 경우에 해당하는 블록을 실행하고, 한 번 실행된 이후에는 나머지 조건을 확인하지 않는다.

if, else if, else는 구문으로 사용되는 것 외에도 표현식(expression)으로도 간주된다. 다시 말해 if 블록 자체가 값을 만들어낼 수 있다. 다음 코드에서는 if 표현식의 결과값을 변수에 직접 할당한다.

```
fn main() {
    let 수 = 10;
    let 결과 = if 수 % 2 == 0 {
        "짝수"
    } else {
        "홀수"
    };

    println!("{}는(은) {}", 수, 결과);
}
```

여기서 if 조건식을 통해 짝수라면 문자열 "짝수"를, 그렇지 않다면 "홀수"를 반환하여 결과 변수에 저장한다. 이런 구조는 삼항 연산자가 존재하지 않는 Rust에서 매우 자주 활용된다. 단, 두 블록이 다른 타입을 반환하려고 시도하면 컴파일 오류가 발생한다. Rust는 정적 타입 언어이므로 if 표현식의 모든 분기에서 동일한 타입을 반환해야 하기 때문이다.

복잡한 조건이 많은 경우에는 match 구문을 사용하는 것이 가독성과 유지보수 측면에서 더 나을 수 있으나, 단순히 여러 분기를 처리하는 목적이라면 if, else if, else 체계만으로도 충분히 표현이 가능하다. 또한 조건 분기와 관련된 중복 계산이나 비효율을 줄이기 위해서는 조건문을 평가하는 순서와 타당성을 세밀하게 설계하는 것이 중요하다.

if, else if, else 구문은 프로그램 흐름 제어에서 필수적이다. 조건식을 엄격하게 bool 타입으로 강제함으로써 예상치 못한 오류 발생을 줄이고, 표현식으로서의 활용 가능성도 제공하여 코드의 간결함을 높이는 Rust의 특성을 잘 보여주는 대표적인 기능이다.
