지금까지 데이터를 통째로 다루는 법을 배웠다면, 오늘은 그 데이터 중 **'내가 필요한 부분만 쏙 골라내는 방법'**인 **슬라이스(Slice)**에 대해 알아볼게요.
어렵지 않으니 저와 함께 천천히 살펴봐요!
---
여러분이 아주 긴 **가래떡** 한 줄을 가지고 있다고 상상해 보세요. 이 떡 전체가 하나의 데이터라면, 여러분은 이 떡을 다 먹을 수도 있지만 **"가운데 3cm만 잘라서 먹고 싶어!"**라고 생각할 수도 있죠?
이때 떡 전체를 새로 만드는 게 아니라, 원래 있던 떡의 **특정 부분만 가리키는 것**이 바로 **슬라이스(Slice, 부분 참조)**입니다.
슬라이스는 데이터를 새로 복사해서 만드는 게 아니라, **"저기서부터 여기까지가 내가 쓸 부분이야!"**라고 손가락으로 가리키기만 하는 아주 경제적인 방법이에요.
---
슬라이스는 **소유권(데이터를 가질 권리)**을 가져오지 않고, 데이터의 일부분을 **참조(빌려오기)**하는 타입입니다.
- **참조(&):** 데이터를 직접 갖지 않고 "저기 있네!" 하고 구경만 하는 것.
- **인덱스(Index):** 데이터가 나열된 순서 번호 (0번부터 시작해요!).
---
가장 많이 쓰이는 '문자열 슬라이스'를 예로 들어볼게요.
fn main() {
// 'hello world'라는 긴 문자열(가래떡)을 만듭니다.
let s = String::from("hello world");
// 0번부터 5번 앞까지(0,1,2,3,4)만 쏙 골라냅니다.
let hello = &s[0..5]; // 'hello' 부분만 가리킵니다.
// 6번부터 11번 앞까지(6,7,8,9,10)만 쏙 골라냅니다.
let world = &s[6..11]; // 'world' 부분만 가리킵니다.
println!("인사: {}, 장소: {}", hello, world);
}
---
슬라이스를 만들 때 사용하는 `..` (범위 연산자)에는 재미있는 규칙이 있어요.
- `[0..5]`: 0번부터 5번 **전까지** (0, 1, 2, 3, 4)
- `[..5]`: **처음부터** 5번 전까지 (0번부터 시작할 땐 앞의 숫자를 생략 가능!)
- `[6..]`: 6번부터 **끝까지** (마지막까지 포함할 땐 뒤의 숫자를 생략 가능!)
- `[..]`: 처음부터 끝까지 **전부 다**
---
슬라이스는 **`&str`**이라는 타입으로 불러요. 이것은 **"문자열의 일부분을 빌려온 상태"**라고 이해하면 완벽합니다!
전체 데이터를 복사하지 않고 필요한 부분만 콕 집어서 사용하기 때문에, 메모리(컴퓨터의 기억 공간)를 아주 아낄 수 있는 똑똑한 방법이랍니다.
---
"0부터 시작하는 숫자 계산이 처음엔 헷갈릴 수 있어요. 하지만 가래떡을 원하는 만큼만 잘라 쓰는 모습을 상상해 보세요. 여러분은 벌써 러스트의 효율적인 메모리 관리 비법 중 하나를 배우신 거예요! 정말 대단하세요!"
| 48. 문자열 슬라이스 활용 (0) | 2026.09.23 |
|---|---|
| 46. 데이터 경합 방지 원리 (0) | 2026.09.23 |
| 45. 가변 참조의 규칙 (0) | 2026.09.23 |
| 44. 참조와 대여: 빌려 쓰기 (0) | 2026.09.14 |
| 43. 소유권 넘겨주기와 돌려받기 (0) | 2026.09.14 |