Menu
Coddy logo textTech

값에 접근하기

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

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

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

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

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

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

match 암(arm)이 명시적인 & 없이 Some(capital)을 사용하는 것을 눈치채셨을 것입니다. 이는 Rust가 이 컨텍스트에서 참조를 자동으로 처리하기 때문입니다. capital은 여전히 값에 대한 참조를 보유하지만, 패턴에 &를 명시적으로 작성할 필요는 없습니다. 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

직접 해보기

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의 모든 레슨