Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

가변 슬라이스(Mutable Slices)

지금까지 슬라이스 타입(str[T])에 대해 이야기할 때는 주로 불변 빌림 형태인 &str&[T]를 예로 들었습니다. 하지만 슬라이스도 당연히 가변(mutable)일 수 있습니다!

가변 슬라이스를 생성하는 방법은 다음과 같습니다.

let mut numbers = vec![1, 2, 3];
let slice: &mut [i32] = &mut numbers;

가변 슬라이스를 얻었다면 이제 슬라이스 내부의 요소를 수정할 수 있습니다.

slice[0] = 42;

이렇게 하면 원본 Vec의 첫 번째 요소가 42로 변경됩니다.

제한 사항(Limitations)

불변 빌림을 다룰 때, 소유권을 가진 타입에 대한 참조보다는 슬라이스 참조를 선호하라고 권장했었습니다(예: &Vec<T>보다는 &[T]). 하지만 가변 빌림의 경우에는 이 규칙이 그대로 적용되지 않습니다.

다음과 같은 상황을 생각해 봅시다.

let mut numbers = Vec::with_capacity(2);
let mut slice: &mut [i32] = &mut numbers;
slice.push(1);

위 코드는 컴파일되지 않습니다! push는 슬라이스의 메소드가 아니라 Vec의 메소드이기 때문입니다. 이는 Rust의 중요한 원칙 중 하나를 보여줍니다. 즉, 슬라이스에서는 요소를 추가하거나 제거할 수 없으며, 오직 이미 존재하는 요소를 수정하거나 교체하는 것만 가능합니다.

이런 관점에서 보면, &mut Vec이나 &mut String&mut [T]&mut str보다 기능적으로 더 강력하다고 할 수 있습니다. 따라서 여러분이 수행하려는 작업이 무엇인지에 따라 가장 적합한 타입을 선택해야 합니다.

Exercise

The exercise for this section is located in 06_ticket_management/11_mutable_slices