Menu
Coddy logo textTech

값에 접근하기

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

해시 맵에 데이터를 저장하고 나면, 이를 검색할 방법이 필요합니다. .get() 메서드를 사용하면 키를 사용하여 값을 조회할 수 있습니다:

let value = my_map.get("some_key");

하지만 이해해야 할 중요한 세부 사항이 있습니다: .get()은 값을 직접 반환하지 않습니다. 대신, 값이 존재함(Some) 또는 존재하지 않음(None)을 나타내는 Rust의 내장 타입인 Option 타입을 반환합니다. 이는 찾고 있는 키가 해시 맵에 존재하지 않을 수도 있기 때문입니다.

키가 존재할 때, .get()Some(&value)를 반환합니다. & 기호에 주목하세요. 이는 값에 대한 참조를 얻는다는 것을 의미합니다. 키가 존재하지 않으면 None을 반환합니다:

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

Some(capital) 매치 암(match arm)에서, Rust는 자동으로 참조를 처리해 줍니다. 여기서 capital은 내부의 참조된 값에 바인딩되므로, 패턴에 &를 명시적으로 작성할 필요가 없습니다.

이 설계는 존재하지 않는 키에 접근하려고 할 때 프로그램이 충돌하는 것을 방지합니다. 오류를 발생시키는 대신, Rust는 값을 찾는 경우와 찾지 못하는 경우라는 두 가지 가능성을 모두 처리하도록 강제함으로써 코드를 더욱 견고하고 예측 가능하게 만듭니다.

challenge icon

챌린지

쉬움

두 개의 입력을 받게 됩니다: 국가 이름과 수도 이름입니다. 국가 이름을 키(타입 String)로 하고 수도 이름을 값(타입 String)으로 저장하는 해시 맵을 생성하세요. 국가와 수도를 해시 맵에 삽입합니다. 그런 다음, 조회할 또 다른 국가 이름을 세 번째 입력으로 받습니다. .get() 메서드를 사용하여 이 국가의 수도를 검색하고, 국가가 맵에 존재하는 경우와 존재하지 않는 경우의 두 가지 상황을 모두 처리하세요.

참고: .get()Option을 반환합니다. 키가 존재하면 Some(&value)(값에 대한 참조)를, 존재하지 않으면 None을 반환합니다. match 문 내에서 Some(capital)이라고 작성하면 Rust가 자동으로 참조를 처리해 주므로, 출력문에서 capital을 직접 사용할 수 있습니다.

요구 사항:

  • std::collections에서 HashMap을 임포트하세요.
  • HashMap<String, String> 타입의 가변(mutable) 해시 맵을 생성하세요.
  • 첫 번째 입력을 국가 이름으로 읽어옵니다.
  • 두 번째 입력을 수도 이름으로 읽어옵니다.
  • 국가와 수도를 해시 맵에 삽입하세요.
  • 세 번째 입력을 조회할 국가 이름으로 읽어옵니다.
  • .get()을 사용하여 조회할 국가의 수도를 검색하세요.
  • match를 사용하여 .get()이 반환한 Option을 처리하세요.
  • 국가를 찾은 경우, 다음을 출력합니다: The capital of [country] is [capital]
  • 국가를 찾지 못한 경우, 다음을 출력합니다: [country] not found in the map

입력:

  • 첫 번째 줄: 삽입할 국가 이름 (예: France)
  • 두 번째 줄: 수도 이름 (예: Paris)
  • 세 번째 줄: 조회할 국가 이름 (예: France 또는 Germany)

출력:

  • 조회할 국가가 존재하는 경우: The capital of [country] is [capital]
  • 조회할 국가가 존재하지 않는 경우: [country] not found in the map

치트 시트

.get() 메서드는 키를 사용하여 해시 맵에서 값을 가져옵니다:

let value = my_map.get("some_key");

.get() 메서드는 키가 해시 맵에 존재하지 않을 수도 있기 때문에 Option 타입을 반환합니다:

  • 키가 존재할 때: Some(&value)를 반환합니다 (값에 대한 참조)
  • 키가 존재하지 않을 때: None을 반환합니다

두 가지 경우를 모두 처리하려면 match를 사용하세요:

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

이러한 설계는 두 가지 가능성을 모두 처리하도록 강제함으로써 존재하지 않는 키에 접근할 때 발생하는 충돌을 방지합니다.

직접 해보기

use std::collections::HashMap;
use std::io;

fn main() {
    // 삽입할 국가 이름을 읽어옵니다
    let mut country = String::new();
    io::stdin().read_line(&mut country).expect("Failed to read line");
    let country = country.trim().to_string();
    
    // 수도 이름을 읽어옵니다
    let mut capital = String::new();
    io::stdin().read_line(&mut capital).expect("Failed to read line");
    let capital = capital.trim().to_string();
    
    // 조회할 국가 이름을 읽어옵니다
    let mut lookup_country = String::new();
    io::stdin().read_line(&mut lookup_country).expect("Failed to read line");
    let lookup_country = lookup_country.trim().to_string();
    
    // TODO: 아래에 코드를 작성하세요
    // HashMap을 생성하고, 국가와 수도를 삽입한 다음, 국가를 조회하세요
    
}
quiz icon실력 점검

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

Logic & Flow의 모든 레슨