Menu
Coddy logo textTech

기본값 제공하기: unwrap_or

Coddy Rust 여정의 Logic & Flow 섹션에 포함된 레슨 — 66개 중 40번째.

.unwrap().expect()Option에서 값을 추출할 수 있지만, 이 둘은 모두 큰 결함이 있습니다. 바로 None을 만났을 때 패닉(panic)을 발생시킨다는 점입니다. 더 안전한 코드를 위해 Rust는 절대 패닉을 발생시키지 않는 메서드인 .unwrap_or()를 제공합니다.

.unwrap_or() 메서드는 기본값을 인자로 받습니다. OptionSome을 포함하고 있으면 내부 값을 반환합니다. None인 경우에는 제공된 기본값을 반환합니다:

let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
println!("Score: {}", score); // 출력: Score: 85

let no_score: Option = None;
let default_score = no_score.unwrap_or(0);
println!("Score: {}", default_score); // 출력: Score: 0

이 방식은 .unwrap()보다 훨씬 안전합니다. 프로그램이 절대 충돌하지 않으며, 항상 사용할 수 있는 값을 반환받기 때문입니다.

challenge icon

챌린지

쉬움

두 개의 입력을 받게 됩니다. 첫 번째 입력은 점수(숫자)이고, 두 번째 입력은 점수의 가용 여부(yes 또는 no)를 나타냅니다. 가용성 상태에 따라 Option<i32>를 생성하세요. .unwrap_or()를 사용하여 기본값 50으로 점수를 안전하게 추출한 다음, 최종 점수를 출력하세요.

요구 사항:

  • 첫 번째 입력(점수)을 읽고 공백을 제거합니다.
  • 첫 번째 입력을 i32로 파싱합니다.
  • 두 번째 입력(가용성 상태)을 읽고 공백을 제거합니다.
  • Option<i32> 변수를 생성합니다:
    • 가용성 상태가 yes이면, Some(score)를 할당합니다.
    • 가용성 상태가 no이면, None을 할당합니다.
  • .unwrap_or(50)를 사용하여 기본값 50으로 점수를 추출합니다.
  • 최종 점수를 Final score: [score] 형식으로 출력합니다.

입력:

  • 첫 번째 줄: 점수를 나타내는 숫자 (예: 85)
  • 두 번째 줄: yes 또는 no

출력:

  • 가용성 상태가 yes인 경우: Final score: [score] (실제 점수)
  • 가용성 상태가 no인 경우: Final score: 50 (기본값)

치트 시트

.unwrap_or() 메서드는 패닉(panic)을 발생시키지 않고 Option에서 값을 추출하는 안전한 방법을 제공합니다. 이 메서드는 기본값을 인자로 받으며, Some인 경우 내부 값을 반환하고, None인 경우 기본값을 반환합니다:

let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
// score는 85입니다

let no_score: Option<i32> = None;
let default_score = no_score.unwrap_or(0);
// default_score는 0입니다

이 메서드는 패닉을 유발하지 않으므로 .unwrap() 또는 .expect()보다 안전합니다. 항상 사용할 수 있는 값을 받게 됩니다.

직접 해보기

use std::io;

fn main() {
    // 점수 읽기
    let mut score_input = String::new();
    io::stdin().read_line(&mut score_input).expect("Failed to read line");
    let score: i32 = score_input.trim().parse().expect("Invalid number");
    
    // 가용성 상태 읽기
    let mut availability = String::new();
    io::stdin().read_line(&mut availability).expect("Failed to read line");
    let availability = availability.trim();
    
    // TODO: 아래에 코드를 작성하세요
    // 가용성 상태에 따라 Option<i32> 생성
    // .unwrap_or(50)을 사용하여 최종 점수 가져오기
    
    
    // 결과 출력
    println!("Final score: {}", final_score);
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨