값에 접근하기
Coddy Rust 여정의 논리와 흐름 섹션에 포함된 레슨. 66개 중 30번째.
해시 맵에 데이터를 저장했다면 이를 검색할 방법이 필요합니다. .get() 메서드를 사용하면 키를 이용해 값을 조회할 수 있습니다:
let value = my_map.get("some_key");하지만 이해해야 할 중요한 세부 사항이 있습니다. .get()은 값을 직접 반환하지 않습니다. 대신 Option 타입을 반환합니다. 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는 두 가지 가능성, 즉 값을 찾는 경우와 찾지 못하는 경우를 모두 처리하도록 하여 코드를 더 견고하고 예측 가능하게 만듭니다.
챌린지
쉬움두 개의 입력을 받습니다. 하나는 국가 이름이고 다른 하나는 수도 이름입니다. 국가 이름을 키(타입 String)로, 수도를 값(타입 String)으로 저장하는 해시 맵을 만드세요. 국가와 해당 수도를 해시 맵에 삽입하세요. 그런 다음 조회할 다른 국가 이름이 포함된 세 번째 입력을 받습니다. .get() 메서드를 사용하여 이 국가의 수도를 가져오고, 국가가 맵에 존재하는 경우와 존재하지 않는 경우를 모두 처리하세요.
참고: .get()은 Option을 반환합니다. 키가 존재하면 Some(&value)(값에 대한 참조)를 반환하고, 존재하지 않으면 None을 반환합니다. match 분기에서는 Some(capital)을 작성할 수 있으며, Rust가 자동으로 참조를 처리하므로 출력문에서 capital을 직접 사용할 수 있습니다.
요구 사항:
std::collections에서HashMap을 가져오세요.HashMap<String, String>타입의 변경 가능한 해시 맵을 만드세요.- 첫 번째 입력을 국가 이름으로 읽으세요.
- 두 번째 입력을 수도 이름으로 읽으세요.
- 국가와 수도를 해시 맵에 삽입하세요.
- 세 번째 입력을 조회할 국가로 읽으세요.
.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을 생성하고, 국가와 수도를 삽입한 다음 국가를 조회하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Rust 컴파일러