본문 바로가기
개발/Rust

[Rust] 슬라이스 vs 슬라이스 레퍼런스

by 77monkey 개발자 2023. 10. 8.
반응형

 

 

 

 

 

 

슬라이스는 벡터(Vector), 문자열(String), 배열(Array) 등과 같은 시퀀스 데이터를 다루는 도구로써, 데이터의 일부분을 안전하게 조작하고 공유할 수 있게 해 줍니다. 슬라이스는 무엇인지 알아보도록 합시다. 추가로 슬라이스 레퍼런스에 대해서도 알아보도록 합시다.

 

슬라이스

슬라이스는 데이터의 일부분에 대한 참조로써, 데이터의 복사본을 생성하지 않고 해당 데이터를 조작할 수 있게 합니다. 슬라이스는 시작 인덱스와 끝 인덱스를 사용하여 데이터의 일부분을 지정하며, 다음과 같은 형식으로 선언됩니다.

[T]

 

슬라이스 생성과 사용

슬라이스 생성과 사용 방법은 아래 코드를 참고하시길 바랍니다. 

보시다시피 벡터, 문자열, 배열 등을 선언한 뒤, 시작 인덱스와 끝 인덱스를 지정해서 슬라이스를 만듭니다. 그리고 출력하면 3,4,5가 출력되는 것을 알 수 있습니다. 슬라이스는 항상 레퍼런스로 전달되기 때문에 "&"를 꼭 써주셔야 합니다.

fn main() {
    let test = [1,2,3,4,5];

    let slice = &test[2..5];

    println!("{:?}", slice);
}
[3, 4, 5]

 

슬라이스 레퍼런스 

슬라이스 레퍼런스는 슬라이스를 참조하는 레퍼런스입니다. 슬라이스 레퍼런스는 불변(&)과 가변(&mut)로 두 가지가 있습니다. 불변인 경우에는 읽기만 가능하고, 가변인 경우에는 읽기/쓰기가 가능합니다. 불변인 경우는 슬라이스에서 살펴보았기 때문에, 가변인 경우에 대해서 코드를 살펴보도록 하겠습니다. 

fn main() {
    let mut test = [1,2,3,4,5];

    let slice = &mut test[2..5];

    slice[2] = 3;

    println!("{:?}", slice);
}
[3, 4, 3]

 

마무리

슬라이스는 결국에는 단독으로 쓰일 수 없고, 레퍼런스 형태로 쓰이게 됩니다. 그렇기 때문에 슬라이스 레퍼런스는 슬라이스라고 불립니다. 또한 함수 인자를 통해서 배열이나 벡터를 넘길 때 슬라이스 레퍼런스를 통해서 넘기기 때문에 알아두시면 사용하기 편합니다. 

반응형

'개발 > Rust' 카테고리의 다른 글

[Rust] 쉐도잉(shadowing)  (0) 2024.04.09
[Rust] 포인터 타입 => 레퍼런스/박스/원시 포인터  (0) 2023.10.09
[Rust] 벡터(Vector)  (0) 2023.10.05
[Rust] 배열(array)  (0) 2023.10.02
[Rust] 튜플(tuple)  (0) 2023.09.28