상세 컨텐츠

본문 제목

47. 슬라이스 타입: 부분 참조하기

RUST 온보딩/러스트를 배우고 만들자_초보자

by 러스트코리아 2026. 9. 23. 09:24

본문

반응형

지금까지 데이터를 통째로 다루는 법을 배웠다면, 오늘은 그 데이터 중 **'내가 필요한 부분만 쏙 골라내는 방법'**인 **슬라이스(Slice)**에 대해 알아볼게요.

 

어렵지 않으니 저와 함께 천천히 살펴봐요!

 

---

### 🥖 비유로 이해하기: "길다란 가래떡"

 

여러분이 아주 긴 **가래떡** 한 줄을 가지고 있다고 상상해 보세요. 이 떡 전체가 하나의 데이터라면, 여러분은 이 떡을 다 먹을 수도 있지만 **"가운데 3cm만 잘라서 먹고 싶어!"**라고 생각할 수도 있죠?

 

이때 떡 전체를 새로 만드는 게 아니라, 원래 있던 떡의 **특정 부분만 가리키는 것**이 바로 **슬라이스(Slice, 부분 참조)**입니다.

 

슬라이스는 데이터를 새로 복사해서 만드는 게 아니라, **"저기서부터 여기까지가 내가 쓸 부분이야!"**라고 손가락으로 가리키기만 하는 아주 경제적인 방법이에요.

---

### 1. 슬라이스란 무엇인가요?

 

슬라이스는 **소유권(데이터를 가질 권리)**을 가져오지 않고, 데이터의 일부분을 **참조(빌려오기)**하는 타입입니다.

 

- **참조(&):** 데이터를 직접 갖지 않고 "저기 있네!" 하고 구경만 하는 것.

- **인덱스(Index):** 데이터가 나열된 순서 번호 (0번부터 시작해요!).

 

---

### 2. 코드 예제로 배우기

 

가장 많이 쓰이는 '문자열 슬라이스'를 예로 들어볼게요.

 

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);
}

 

**코드 설명:**

1. `let s = String::from("hello world");`: 전체 문자열을 만듭니다.

2. `&s[0..5]`: `&`는 **빌려온다**는 뜻이고, `[0..5]`는 **0번부터 5번 앞까지**라는 범위를 뜻해요.

3. 결과적으로 `hello` 변수에는 "hello"라는 부분만 담기게 됩니다.

---

### 3. 슬라이스의 규칙 (범위 지정하기)

 

슬라이스를 만들 때 사용하는 `..` (범위 연산자)에는 재미있는 규칙이 있어요.

- `[0..5]`: 0번부터 5번 **전까지** (0, 1, 2, 3, 4)

- `[..5]`: **처음부터** 5번 전까지 (0번부터 시작할 땐 앞의 숫자를 생략 가능!)

- `[6..]`: 6번부터 **끝까지** (마지막까지 포함할 땐 뒤의 숫자를 생략 가능!)

- `[..]`: 처음부터 끝까지 **전부 다**

---

### 💡 기억해 두면 좋은 점

 

슬라이스는 **`&str`**이라는 타입으로 불러요. 이것은 **"문자열의 일부분을 빌려온 상태"**라고 이해하면 완벽합니다!

 

전체 데이터를 복사하지 않고 필요한 부분만 콕 집어서 사용하기 때문에, 메모리(컴퓨터의 기억 공간)를 아주 아낄 수 있는 똑똑한 방법이랍니다.

---

### 🌟 응원의 한 마디!

"0부터 시작하는 숫자 계산이 처음엔 헷갈릴 수 있어요. 하지만 가래떡을 원하는 만큼만 잘라 쓰는 모습을 상상해 보세요. 여러분은 벌써 러스트의 효율적인 메모리 관리 비법 중 하나를 배우신 거예요! 정말 대단하세요!"

반응형

관련글 더보기