소개
프로그램은 여러 선택지 중 하나를 선택하고 여러 값에 대해 계산을 반복할 수 있을 때 유용해집니다. Rust에서는 Boolean 조건으로 결정을 내리고, 루프로 반복 작업을 제어합니다.
이 실습에서는 미리 준비된 배송 요약 프로그램의 네 부분을 완성합니다. 각 단계에서는 비교식, 두 분기 결과, 누적 합계 표현식, 승인 조건 중 하나만 수정합니다.
Boolean 비교 만들기
이 단계에서는 패키지의 무게와 제한값을 비교하고, 참 또는 거짓 결과를 저장합니다.
준비된 프로젝트로 이동한 후 소스 파일을 엽니다.
cd /home/labex/project/shipping-summary
nano src/main.rs
비교 연산자 ==는 두 값이 같은지 확인합니다. 이는 값을 저장하거나 대입할 때 앞에서 사용한 단일 =와 다릅니다. 시작 코드의 비교 결과가 false인 이유는 12가 10과 같지 않기 때문입니다. 이 보고서에서는 패키지 무게가 제한값보다 큰 경우 패키지를 무거운 것으로 처리합니다.
Step 1 줄에서 ==만 큰 값 비교 연산자인 >로 바꿉니다.
let is_heavy = package_weight > heavy_limit; // Step 1
비교 결과인 Boolean 값 true가 is_heavy에 저장됩니다. Ctrl+O를 눌러 저장하고, Enter를 누른 다음 Ctrl+X로 종료합니다. 프로그램을 실행합니다.
cargo run --quiet
이제 첫 번째 줄에 다음과 같이 표시되어야 합니다.
Heavy package: true
If 표현식으로 값 선택하기
이 단계에서는 if 표현식을 사용해 배송 라벨을 선택합니다.
if는 Boolean 조건을 확인합니다. 조건이 true이면 Rust는 첫 번째 블록을 평가하고, 그렇지 않으면 else 블록을 평가합니다. Rust에서 if는 값을 만들어 내는 표현식이 될 수 있습니다. 여기서는 두 분기 모두 텍스트를 반환하므로 선택된 텍스트를 shipping_label에 대입할 수 있습니다. 전체 if 표현식이 하나의 저장되는 값이 되므로 두 분기는 호환되는 타입을 반환해야 합니다.
파일을 엽니다.
nano src/main.rs
Step 2 줄에서 첫 번째 "unknown"을 "Freight"로, 두 번째 "unknown"을 "Standard"로 바꿉니다.
let shipping_label = if is_heavy { "Freight" } else { "Standard" }; // Step 2
Rust에서는 조건을 괄호로 감쌀 필요가 없습니다. 중괄호가 가능한 두 결과를 명확히 구분합니다.
저장하고 종료한 다음 보고서를 실행합니다.
cargo run --quiet
is_heavy가 true이므로 두 번째 줄에 다음과 같이 표시되어야 합니다.
Shipping label: Freight
For 루프로 값 더하기
이 단계에서는 범위를 지정한 for 루프와 끝값을 포함하는 범위를 사용해 누적 합계를 계산합니다.
범위 3..=6은 양 끝값인 3과 6을 모두 포함하는 3부터 6까지의 정수를 나타냅니다. for 루프는 이 범위의 값을 순서대로 하나씩 가져오며, 루프 본문 안에서 각 값을 임시로 weight라는 이름으로 사용합니다.
변경 가능한 total_weight의 초기값은 0입니다. 반복할 때마다 현재 weight를 기존 합계에 더해야 합니다.
파일을 열고 Step 3 줄을 찾습니다.
nano src/main.rs
weight * 0만 weight로 바꿉니다.
total_weight = total_weight + weight; // Step 3
저장하고 종료한 다음 코드를 확인합니다.
cargo check
보고서를 실행합니다.
cargo run --quiet
루프는 3 + 4 + 5 + 6을 더하므로 다음과 같이 표시되어야 합니다.
Total weight: 18
루프 안에서 결정 내리기
이 단계에서는 반복과 조건문을 함께 사용해 승인된 주문 수를 셉니다.
두 번째 루프도 3부터 6까지의 무게를 차례로 처리합니다. 주문의 무게가 5보다 작거나 같으면 주문을 승인합니다. 연산자 <=는 작거나 같음을 의미합니다.
파일을 열고 Step 4 줄을 찾습니다.
nano src/main.rs
임시 비교식 weight < 0을 다음 코드로 바꿉니다.
let is_accepted = weight <= 5; // Step 4
다음에 나오는 if는 문장으로 사용됩니다. is_accepted가 true이면 해당 블록에서 카운터를 증가시킵니다. 여기서는 거부된 주문에 대해 별도의 작업이 필요하지 않으므로 else가 없습니다.
저장하고 종료한 다음 완성된 보고서를 실행합니다.
cargo run --quiet
무게 3, 4, 5는 승인되고 6은 승인되지 않습니다. 최종 출력은 다음과 같아야 합니다.
Heavy package: true
Shipping label: Freight
Total weight: 18
Accepted orders: 3
요약
Boolean 비교를 만들고, if 표현식으로 값을 선택했으며, for 루프와 끝값을 포함하는 범위로 작업을 반복했습니다. 또한 누적 합계를 계산하고, 루프 안에 조건을 배치해 조건에 맞는 값을 세었습니다.



