오늘은 문자열의 '일부분'만 쏙 골라서 사용하는 아주 유용한 기술인 **'문자열 슬라이스'**에 대해 알아볼 거예요.
---
여러분 앞에 아주 긴 **김밥 한 줄**이 있다고 상상해 보세요. 이 김밥 전체가 우리가 배운 `String`(메모리에 저장된 실제 문자열 데이터)이에요.
그런데 여러분은 이 긴 김밥을 다 먹고 싶은 게 아니라, **"3번째 조각부터 5번째 조각까지만"** 딱 보고 싶어요. 이때 김밥을 실제로 칼로 썰어서 따로 담는 게 아니라, 그 부분만 보이도록 **투명한 카드보드지(창문)**를 갖다 대는 것이 바로 **'슬라이스(Slice)'**랍니다.
슬라이스는 원본을 건드리지 않고, "여기서부터 여기까지만 잠깐 빌려서 볼게!"라고 말하는 것과 같아요.
---
* **슬라이스(Slice):** 데이터 전체가 아니라 일부분을 가리키는 도구예요.
* **참조(&):** 슬라이스는 진짜 물건을 새로 만드는 게 아니라, 원본을 '빌려(Reference)' 오는 것이기 때문에 앞에 `&` 기호를 붙여요.
* **범위(Range):** `[시작..끝]` 처럼 써서 어디부터 어디까지 볼지 정해요. (이때 '끝' 번호 바로 직전까지만 포함한다는 점을 주의하세요!)
---
아주 짧고 쉬운 예제를 볼게요. "Hello Rust"라는 문자열에서 "Hello"만 쏙 뽑아볼까요?
fn main() {
// 1. 전체 문자열(긴 김밥)을 만듭니다.
let greeting = String::from("Hello Rust");
// 2. 0번째 글자부터 5번째 글자 직전까지 슬라이스(창문)를 만듭니다.
// & 기호는 '잠깐 빌린다'는 뜻이고, [0..5]는 '0, 1, 2, 3, 4' 위치를 뜻해요.
let hello = &greeting[0..5];
// 3. 결과 출력! "Hello"가 출력됩니다.
println!("{}", hello); // 화면에 슬라이스한 부분을 보여줘요.
}
러스트는 아주 꼼꼼한 친구예요. 그래서 슬라이스를 쓸 때 한 가지 조심할 점이 있어요.
1. **인덱스(Index, 순서 번호):** 컴퓨터는 숫자를 **0**부터 센다는 걸 잊지 마세요! 첫 번째 글자는 0번이에요.
2. **한글 조심:** 영어는 한 글자가 1바이트지만, 한글은 한 글자가 **3바이트**를 차지해요. 그래서 한글 문자열을 슬라이스할 때 글자 중간을 뚝 끊으려고 하면 러스트가 "아야! 글자가 깨져요!"라며 에러(프로그램 오류)를 낼 수 있어요. 처음에는 영어로 먼저 연습해 보는 걸 추천드려요!
---
문자열 슬라이스는 메모리를 아끼면서도 필요한 부분만 효율적으로 사용할 수 있게 해주는 러스트의 마법 같은 도구예요. 처음에는 `[0..5]` 같은 숫자가 헷갈릴 수 있지만, 몇 번만 창문을 대보는 연습을 하면 금방 익숙해질 거예요.
| 47. 슬라이스 타입: 부분 참조하기 (0) | 2026.09.23 |
|---|---|
| 46. 데이터 경합 방지 원리 (0) | 2026.09.23 |
| 45. 가변 참조의 규칙 (0) | 2026.09.23 |
| 44. 참조와 대여: 빌려 쓰기 (0) | 2026.09.14 |
| 43. 소유권 넘겨주기와 돌려받기 (0) | 2026.09.14 |