여기까지 오신 여러분은 정말 대단한 열정을 가지셨어요! 오늘은 우리가 읽은 문장에 어떤 단어가 몇 번 나오는지 세어주는 **'단어 계산기'**를 만들어 볼 거예요.
우리가 우편물을 분류한다고 상상해 보세요. 커다란 가방 안에 여러 사람의 이름이 적힌 편지들이 섞여 있습니다.
1. **우편함 준비하기:** 이름을 적어 붙일 수 있는 빈 칸이 많은 **분류함(HashMap)**을 준비합니다.
2. **편지 꺼내기:** 가방에서 편지를 **하나씩(반복문)** 꺼냅니다.
3. **이름 확인하기:** 편지에 적힌 **이름(단어)**을 확인합니다.
4. **표시하기:**
* 처음 보는 이름이라면? 새 칸에 이름을 적고 **'1'**이라고 표시합니다.
* 이미 있는 이름이라면? 그 칸에 적힌 숫자에 **'1'을 더합니다.**
이 과정을 마치면 각 이름 아래에 편지가 총 몇 통인지 적히게 되겠죠? 러스트로도 똑같이 할 수 있어요!
---
자, 이제 아주 짧고 핵심적인 코드로 이 '단어 계산기'를 만들어 볼게요.
use std::collections::HashMap; // 단어를 담을 '이름표 붙은 상자(HashMap)' 기능을 불러와요.
fn main() {
let text = "사과 배 사과 귤 배 사과"; // 우리가 관찰할 문장(문자열)이에요.
let mut counts = HashMap::new(); // 단어와 개수를 저장할 빈 상자(해시맵)를 만들어요.
// 문장을 공백 기준으로 나누어(split_whitespace) 하나씩 꺼내서(for) 살펴봅니다.
for word in text.split_whitespace() {
// 상자에 단어가 있으면 가져오고, 없으면 0을 넣고 시작해요(or_insert).
let count = counts.entry(word).or_insert(0);
*count += 1; // 해당 단어의 숫자를 1만큼 늘려요.
}
println!("{:?}", counts); // 최종적으로 어떤 단어가 몇 개 있는지 화면에 보여줘요.
}
---
* **HashMap (해시맵):** '열쇠(Key)'와 '값(Value)'을 쌍으로 저장하는 창고예요. 여기서는 '단어'가 열쇠고, '개수'가 값이에요.
* **split_whitespace (스플릿 화이트스페이스):** 문장을 공백(띄어쓰기, 탭 등)을 기준으로 싹둑싹둑 자르는 가위 같은 기능이에요.
* **entry (엔트리):** "상자 안에 이 이름의 칸이 있니?"라고 물어보고 그 칸을 가리키는 손가락이에요.
* **or_insert (오어 인서트):** "만약 칸이 없으면 새로 만들고 이 값을 넣어줘"라는 친절한 명령이에요.
* **Iterate (반복하다):** 여러 개가 담긴 주머니에서 하나씩 차례대로 꺼내는 행위를 말해요.
---
처음에는 `HashMap`이나 `entry` 같은 단어들이 낯설게 느껴질 수 있어요. 하지만 괜찮습니다! 방금 우리는 **"데이터를 분류하고 숫자를 세는"** 아주 중요한 프로그래밍의 기초를 배우신 거예요.
이 코드를 조금씩 바꿔보며 놀아보세요. "사과" 대신 여러분이 좋아하는 과일 이름을 넣어보기도 하고, 더 긴 문장을 넣어보기도 하세요. 직접 해보는 것이 실력을 키우는 가장 빠른 지름길이랍니다.
| 52. 구조체 정의와 인스턴스 생성 (0) | 2026.10.01 |
|---|---|
| 51. 구조체란 무엇인가? (0) | 2026.10.01 |
| 49. 소유권 개념 총정리 퀴즈 (0) | 2026.09.28 |
| 48. 문자열 슬라이스 활용 (0) | 2026.09.28 |
| 47. 슬라이스 타입: 부분 참조하기 (0) | 2026.09.23 |