Rust 불리언
불리언(boolean)은 가장 단순한 타입이에요. 값은 true(참) 아니면 false(거짓), 딱 두 가지뿐이에요. Rust에서는 bool이라고 부르고, 코드에서 무언가를 결정해야 하는 곳이라면 어디서든 쓰게 돼요.
불리언 선언하기
섹션 제목: “불리언 선언하기”fn main() { let is_active = true; let has_error: bool = false; println!("활성: {is_active}, 에러: {has_error}");}Rust는 true나 false를 보고 거의 항상 bool 타입을 스스로 추론해요. 그래서 타입을 직접 적어 줄 일은 별로 없어요.
불리언은 보통 비교에서 나와요
섹션 제목: “불리언은 보통 비교에서 나와요”실제 코드에서 true나 false를 직접 적는 일은 생각보다 드물어요. 대부분은 무언가를 비교한 결과로 만들어져요.
fn main() { let age = 20; let can_vote = age >= 18; println!("투표 가능: {can_vote}");}실행 결과:
투표 가능: true조건에서 불리언 사용하기
섹션 제목: “조건에서 불리언 사용하기”bool의 가장 중요한 역할은 if의 어느 쪽 분기를 실행할지 정하는 거예요.
fn main() { let is_raining = true;
if is_raining { println!("우산을 챙기세요"); } else { println!("우산은 두고 가도 돼요"); }}if는 if…else 페이지에서 제대로 다뤄요. 여기서는 불리언이 왜 중요한지 맛만 보는 거예요.
불리언 조합과 단락 평가
섹션 제목: “불리언 조합과 단락 평가”&&(그리고), ||(또는), !(아님)은 연산자 페이지에서 이미 만나 봤어요. 여기에 하나만 더 알아 두면 좋아요. 이 연산자들은 답이 이미 정해지면 중간에 멈춰요. 이것을 단락 평가(short-circuit evaluation)라고 해요.
a && b에서a가false라면 전체 결과는 무조건false예요. 그래서 Rust는b를 아예 보지 않아요.a || b에서a가true라면 전체 결과는 무조건true예요. 그래서 Rust는b를 아예 보지 않아요.
이건 단순히 속도를 위한 요령이 아니에요. 왼쪽 조건이 오른쪽 조건을 보호해 줄 수 있어요.
fn main() { let count = 0; let total = 50;
// count가 0이므로 Rust는 `count != 0`에서 멈추고 나눗셈을 하지 않아요. let big_average = count != 0 && total / count > 10; println!("평균이 큰가요: {big_average}");
let is_weekend = true; let has_homework = true; // is_weekend가 true이므로 `!has_homework`는 확인하지 않아요. let can_relax = is_weekend || !has_homework; println!("쉴 수 있나요: {can_relax}");}실행 결과:
평균이 큰가요: false쉴 수 있나요: true0으로 나누면 프로그램이 멈춰 버려요. 하지만 count != 0이 먼저 오고 그 값이 false이기 때문에 나눗셈은 아예 실행되지 않아요. 두 쪽의 순서를 바꾸면(total / count > 10 && count != 0) 나눗셈이 먼저 실행돼요. 이 예제에서는 컴파일러가 이를 알아채고 빌드를 거부해요(“this operation will panic at runtime”, 즉 실행하면 패닉이 일어난다는 뜻이에요). 하지만 값이 프로그램 실행 중에야 정해진다면 그대로 프로그램이 멈추게 돼요. 그러니 “안전 확인” 조건은 항상 왼쪽에 두세요.
연습 문제
섹션 제목: “연습 문제”1. 놀이기구를 탈 수 있을까요?
섹션 제목: “1. 놀이기구를 탈 수 있을까요?”어떤 놀이기구는 키가 120 cm 이상이거나, 또는 나이가 8살 이상이면서 그리고 어른과 함께 타면 탈 수 있어요. 키 115, 나이 9, with_adult = true를 저장하고, 이 아이가 탈 수 있는지 출력해 보세요. 힌트: “나이와 어른” 부분은 괄호로 묶어 주세요.
정답 보기
fn main() { let height_cm = 115; let age = 9; let with_adult = true;
let tall_enough = height_cm >= 120; let can_ride = tall_enough || (age >= 8 && with_adult);
println!("키가 충분한가요: {tall_enough}"); println!("탈 수 있나요: {can_ride}");}실행 결과:
키가 충분한가요: false탈 수 있나요: true2. 윤년
섹션 제목: “2. 윤년”어떤 해가 4로 나누어떨어지지만 100으로는 나누어떨어지지 않거나, 또는 400으로 나누어떨어지면 윤년이에요. 2024에 대해 불리언 is_leap을 계산해서 출력하고, 1900에 대해서도 똑같이 해 보세요. 힌트: “4로 나누어떨어진다”는 year % 4 == 0이에요. 그리고 두 번째 let으로 year와 is_leap을 섀도잉할 수 있어요.
정답 보기
fn main() { let year = 2024; let is_leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; println!("{year}년은 윤년인가요: {is_leap}");
let year = 1900; let is_leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; println!("{year}년은 윤년인가요: {is_leap}");}실행 결과:
2024년은 윤년인가요: true1900년은 윤년인가요: falsebool은true또는false, 딱 두 가지 값만 가져요.- 비교 연산(
==,<,>=, …)은 불리언을 만들어요. if의 조건은 진짜bool이어야 해요. 숫자나 문자열이 자동으로 변환되지 않아요.&&와||는 단락 평가를 해요. 답이 정해지면 오른쪽을 건너뛰니까, 안전 확인은 왼쪽에 두세요.
이해도 점검
섹션 제목: “이해도 점검”이해도 점검
1. age >= 18 같은 비교는 어떤 타입의 값을 만드나요?
2. 다른 몇몇 언어처럼, Rust에서도 0 같은 정수를 if의 조건으로 바로 쓸 수 있나요?
3. count != 0 && total / count > 10에서 count가 0이면 어떻게 되나요?
점수: 0 / 3
더 알아보기
섹션 제목: “더 알아보기”- 데이터 타입: 불리언 타입 - The Rust Programming Language 한국어판: 다른 기본 타입들과 함께
bool을 짧게 소개하는 공식 문서예요. bool- 표준 라이브러리 문서 (영어):then,then_some같은bool의 모든 메서드를 볼 수 있어요. 준비가 되면 읽어 보세요.- Lazy boolean operators - The Rust Reference (영어):
&&와||가 오른쪽을 건너뛰는 정확한 규칙이 나와 있어요. - Primitives - Rust by Example (영어): Rust의 다른 기본 타입들과 함께
bool을 실행 가능한 예제로 보여 줘요.