hyunsu blog

홈강좌Rust 입문·중급 47편 중 7편째

Rust bool 과 char — 참·거짓 하나, 글자 하나

목차 · 4
  1. 01비교하면 bool 이 나온다
  2. 02char 는 작은따옴표다
  3. 03한글도 이모지도 char 하나다
  4. 04실습 — 입장 조건 바꿔 보기

Rust 의 bool 은 true 와 false 두 값뿐이고, >= 나 == 같은 비교의 결과가 bool 이다. char 는 글자 하나를 작은따옴표로 담는다. 큰따옴표로 쓰면 문자열이 되어 E0308 이 난다. 한글 한 글자, 이모지 하나도 char 하나다.

01 비교하면 bool 이 나온다

놀이기구 입장을 정한다고 하자. 19살 이상이거나 보호자와 함께면 들어갈 수 있다.

rust
fn main() {
    let age = 15;
    let with_parent = true;

    let is_adult = age >= 19;
    let can_enter = is_adult || with_parent;

    println!("adult: {is_adult}");
    println!("enter: {can_enter}");
    println!("not adult: {}", !is_adult);
}
text
   Compiling ticket v0.1.0 (~/projects/ticket)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.17s
     Running `target/debug/ticket`
adult: false
enter: true
not adult: true
  • age >= 19 는 "19 이상인가" 를 묻고, 답으로 true 나 false 를 낸다. 15 는 19 보다 작으니 false 다.
  • || 는 "또는" 이다. 둘 중 하나만 true 여도 true 다. 보호자와 함께니 true 가 됐다.
  • ! 는 뒤집기다. !is_adult 는 false 를 뒤집어 true 다.

자주 쓰는 연산을 모으면 이렇다.

연산뜻예 → 결과
== · !=같다 · 다르다3 == 3 → true
< · <= · > · >=크기 비교15 >= 19 → false
&&그리고 (둘 다 참)true && false → false
||또는 (하나라도 참)true || false → true
!뒤집기!true → false

bool 은 12편에서 if 의 조건으로 다시 나온다.

02 char 는 작은따옴표다

이름의 첫 글자를 char 에 담아 보자. 다른 언어 습관대로 큰따옴표를 쓰면 이렇게 된다.

rust
fn main() {
    let initial: char = "K";
    println!("{initial}");
}
text
error[E0308]: mismatched types
 --> src/main.rs:2:25
  |
2 |     let initial: char = "K";
  |                  ----   ^^^ expected `char`, found `&str`
  |                  |
  |                  expected due to this
  |
help: if you meant to write a `char` literal, use single quotes
  |
2 -     let initial: char = "K";
2 +     let initial: char = 'K';
  |
  1. 무엇 — 타입이 안 맞는다(mismatched types).
  2. 어디 — 2번째 줄의 "K". char 가 와야 하는데 &str 이 왔다. &str 은 문자열이다(20편).
  3. 고치는 법 — help: 가 "char 를 쓰려던 것이면 작은따옴표를 쓰라" 고 한다. - 줄이 지금 코드, + 줄이 고친 코드다.

Rust 에서 따옴표는 뜻이 다르다. 작은따옴표 'K' 는 글자 하나(char), 큰따옴표 "K" 는 문자열이다. 글자가 하나뿐이어도 큰따옴표면 문자열이다.

03 한글도 이모지도 char 하나다

rust
fn main() {
    let initial = 'K';
    let hangul = '가';
    let crab = '🦀';
    println!("{initial} {hangul} {crab}");
    println!("{}", hangul as u32);
}
text
   Compiling initial v0.1.0 (~/projects/initial)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.16s
     Running `target/debug/initial`
K 가 🦀
44032

char 하나에는 영어 글자뿐 아니라 한글 한 글자, 이모지 하나까지 담긴다. 유니코드 글자 하나가 char 하나다.

마지막 줄은 6편의 as 로 '가' 를 숫자로 바꾼 것이다. 44032 는 유니코드에서 '가' 의 번호다. 컴퓨터는 글자를 이런 번호로 기억한다.

04 실습 — 입장 조건 바꿔 보기

bool-ops 에서 age 를 20 으로, with_parent 를 false 로 바꿔 돌려 보자. 성인이니 enter: true 가 나와야 한다. || 를 && 로 바꾸면 "성인이면서 보호자와 함께" 여야 들어갈 수 있다. 결과가 어떻게 바뀔지 먼저 짐작한 뒤 돌려 보면 연산이 손에 붙는다. 다음 편은 값 여러 개를 하나로 묶는 튜플이다.