본문 바로가기
개발/Rust

[Rust] bool 타입

by 77monkey 개발자 2023. 9. 27.
반응형

 

 

 

 

 

Rust에서 bool 타입은 아마 가장 간단한 타입이지 않을까 싶습니다. C/C++에서 접했던 bool 타입과도 유사하기 때문입니다. 하지만 조금 다른 점도 있기 때문에 Rust에서의 bool 타입을 알아보도록 하겠습니다.

 

bool 타입

bool 타입은 true 또는 false 값만 가질 수 있습니다. 이러한 true와 false 값은 조건문 또는 제어문에서 중요합니다. 그 이유는 조건문 또는 제어문의 조건식의 결과는 bool 타입인 true 또는 false 값을 가져야 하기 때문입니다.

bool 타입은 또한 true 또는 false 값을 가져서 1bit로 충분히 표현이 가능하지만, Rust에서는 1 Byte를 할당합니다. 

 

bool 선언

bool 선언과 할당은 [Rust] 변수 선언에서 했던 것과 유사하게 하시면 됩니다. is_true 변수는 타입 명시한 경우이고, is_false 변수는 타입 추론한 경우입니다. 이해하시는데 큰 어려움이 없으셨을 것이라 생각됩니다.

fn main() {
    let is_true: bool = true;
    let is_false = false;
}

그러면 true를 정수타입인 i32로 바꾸면 어떻게 될까요? 궁금하지 않으신가요? 이미 변수명에 답이 있지만, 그래도 한번 보도록 합시다. 

fn main() {
    let is_0 = false as i32;
    let is_1 = true as i32;

    println!("is_0 = {}", is_0);
    println!("is_1 = {}", is_1);
}

코드에서 보시다시피, false와 true는 i32로 변형하면 우리가 생각한 그대로  true는 1로, false는 0으로 변환이 됩니다. 그렇다면 아래 코드도 될까요? 

fn main() {
    let is_true = 1 as bool;
    let is_false = 0 as bool;

    println!("is_true = {}", is_true);
    println!("is_false = {}", is_false);
}

위 코드는 동작하지 못하고, build error가 발생합니다. 

  |
2 |     let is_true = 1 as bool;
  |                   ^^^^^^^^^ help: compare with zero instead: `1 != 0`
  |
3 |     let is_false = 0 as bool;
  |                    ^^^^^^^^^ help: compare with zero instead: `0 != 0`

잘 읽어보면 조건식을 쓰라고 제안해 주고 있습니다. 즉, 정수 타입을 bool 타입으로 변환되지 않습니다. 

 

조건식에서 많이 쓰이는 bool

bool 타입은 조건식에서 많이 쓰입니다. 여태까지 배운 조건식을 사용하는 경우는 if문입니다. if문에서 조건식은 항상 true 또는 false로 나와야 합니다. 여기에서 C/C++과 다른 점이 나옵니다. C/C++에서는 조건식이 0인 경우에 대해서는 false로 인식을 하지만, 0이 아닌 경우에는 true로 인식을 하게 되었습니다. 하지만 Rust에서는 이렇게 표현을 할 수 없습니다. 확실하게 true인지 false인지 명시를 해줘야 합니다.

fn main() {
    if 0 == 0 {
        println!("0 is 0");
    }
}

위의 예시는 0이 0과 같은지 비교를 하여 true가 나왔기 때문에 실행시켰을 때 "0 is 0"이 출력되게 됩니다. 아래 코드는 Rust에서 동작하지 않기 때문에 C/C++가 주언어이신 분들은 주의하셔야 합니다. 

fn main() {
    let x = 77;
    if x { // <-- error code !!!
        println!("x is {}", x);
    }
}

혹시 몰라서 한 번 더 강조하지만 x가 77이기 때문에 true이겠다고 생각하지만 Rust는 확실하게 알려줘야 합니다. 그렇기 때문에 조건식에 x만 쓰면 complie error를 만나게 됩니다. 바로 아래와 같이 말입니다. 

  |
3 |     if x { // <-- error code !!!
  |        ^ expected `bool`, found integer

 

마무리

Rust에서 bool 타입은 생각했던 것보다는 좀 내용이 많았습니다. 다시 한 번 강조하지만, 조건식 결과는 bool 타입이어야 합니다. 실수를 하더라도 빌드 에러에서 잡아주기 때문에 너무 겁먹을 필요는 없을 것 같습니다. 다만 빌드 에러가 났을 때 왜 수정이 필요한지 이해할 수 있으면 좋을 것 같습니다.

 

반응형

'개발 > Rust' 카테고리의 다른 글

[Rust] 배열(array)  (0) 2023.10.02
[Rust] 튜플(tuple)  (0) 2023.09.28
[Rust] if 문  (0) 2023.09.04
[Rust] 변수 선언  (0) 2023.09.03
[Rust] 데이터 기본 타입  (0) 2023.09.02