반응형
배열은 러스트에서 동일한 타입의 값들을 고정된 크기로 저장할 수 있는 데이터 타입입니다. 배열은 연속된 메모리 공간에 데이터를 저장하며, 컴파일 타임에 크기와 타입이 고정됩니다. 배열은 대괄호 []
를 사용하여 정의하며, 각 요소는 쉼표로 구분됩니다.
배열의 특징
- 배열의 길이는 고정되어 있으며, 한 번 정의되면 변경할 수 없습니다.
- 배열의 모든 요소는 동일한 타입이어야 합니다.
- 배열의 요소는 인덱스를 사용하여 접근할 수 있으며, 인덱스는 0부터 시작합니다.
배열 정의 방법
fn main() {
// 배열 정의: 길이가 5이고, 각 요소가 i32 타입인 배열
let numbers: [i32; 5] = [1, 2, 3, 4, 5];
// 배열 요소에 접근
println!("First element: {}", numbers[0]); // 1
println!("Second element: {}", numbers[1]); // 2
// 배열의 길이
println!("Array length: {}", numbers.len()); // 5
}
배열 정의와 초기화
- 배열 정의:
let numbers: [i32; 5] = [1, 2, 3, 4, 5];
numbers
는 길이가 5인i32
타입의 배열입니다.- 배열의 길이는 타입에 포함되며,
[i32; 5]
와 같이 정의합니다.
- 요소 접근:
numbers[0]
,numbers[1]
과 같이 인덱스를 사용해 배열의 요소에 접근합니다. - 배열의 길이:
.len()
메서드를 사용하여 배열의 길이를 구할 수 있습니다.
배열의 동일한 값으로 초기화
배열을 동일한 값으로 초기화할 때는 [value; length]
형태를 사용할 수 있습니다.
fn main() {
// 모든 요소가 3인 길이 5의 배열
let repeated_array = [3; 5];
println!("{:?}", repeated_array); // [3, 3, 3, 3, 3]
}
배열의 유효한 인덱스 접근
러스트에서는 배열에 접근할 때, 유효하지 않은 인덱스에 접근하려고 하면 컴파일 타임이 아닌 런타임에 패닉이 발생합니다. 따라서 인덱스를 사용할 때는 배열의 길이를 확인하는 것이 중요합니다.
fn main() {
let array = [1, 2, 3, 4, 5];
let index = 10;
// 잘못된 인덱스 접근 (런타임에 패닉 발생)
// println!("Element at index {}: {}", index, array[index]);
// 안전하게 접근하려면 다음과 같이 체크
if index < array.len() {
println!("Element at index {}: {}", index, array[index]);
} else {
println!("Index out of bounds!");
}
}
배열과 반복문
배열은 반복문(for
)을 통해 각 요소에 순차적으로 접근할 수 있습니다.
fn main() {
let numbers = [10, 20, 30, 40, 50];
for number in numbers.iter() {
println!("Value: {}", number);
}
}
배열을 함수에 전달
배열은 함수의 파라미터로 전달할 때 참조(&
)를 사용하면 배열을 복사하지 않고 원본 배열에 접근할 수 있습니다.
fn print_array(arr: &[i32]) {
for val in arr.iter() {
println!("Value: {}", val);
}
}
fn main() {
let my_array = [1, 2, 3, 4, 5];
print_array(&my_array);
}
이 예제에서 print_array
함수는 슬라이스(&[i32]
)를 받아 배열의 요소를 출력합니다. 이렇게 하면 배열의 길이가 고정되지 않아도 사용이 가능하며, 메모리 효율도 높아집니다.
배열과 슬라이스
슬라이스는 배열의 일부를 참조하는 타입으로, 배열의 일부분을 다룰 때 매우 유용합니다.
fn main() {
let array = [1, 2, 3, 4, 5];
// 배열의 슬라이스 가져오기
let slice = &array[1..4]; // [2, 3, 4]
for val in slice.iter() {
println!("Slice value: {}", val);
}
}
슬라이스를 사용하면 배열의 일부분을 가리키는 참조를 만들 수 있으며, 슬라이스의 크기는 동적으로 결정됩니다.
정리
- 배열은 고정된 길이와 동일한 타입의 요소를 갖는 자료 구조입니다.
- 배열의 요소는 인덱스를 통해 접근하며, 인덱스 범위를 벗어나면 런타임 에러가 발생할 수 있습니다.
- 배열은 슬라이스로 참조하여 함수에 전달하거나 배열의 일부를 다룰 수 있습니다.
반응형
'언어 > Rust' 카테고리의 다른 글
[ Rust ] //, /**/, ///, //! - 주석 달기 (0) | 2024.10.23 |
---|---|
[ Rust ] fn - 함수를 사용해서 코드 재활용 하기 (1) | 2024.10.23 |
[ Rust ] tuples - 다른 데이터 타입을 하나로 묶음으로 결학하기 (1) | 2024.10.23 |
[ Rust ] 유리수, 복소수, 없는 값 (null) 타입 (0) | 2024.09.08 |
[ Rust ] 러스트는 비교시 타입이 달라서 에러가 난 경우 (0) | 2024.09.08 |