벡터 요소에 접근하기
Coddy Rust 여정의 Logic & Flow 섹션에 포함된 레슨 — 66개 중 10번째.
벡터에 요소가 포함되면, 개별 값에 접근해야 할 것입니다. Rust는 벡터에서 요소를 가져오는 두 가지 다른 접근 방식을 제공하며, 각각은 편의성과 안전성 사이의 고유한 트레이드오프를 가지고 있습니다.
첫 번째 방법은 배열과 유사하게 대괄호를 사용하는 인덱스 구문을 사용합니다:
let numbers = vec![10, 20, 30, 40];
let first = numbers[0]; // 10을 가져옵니다
let third = numbers[2]; // 30을 가져옵니다이 구문은 익숙하고 간결하지만, 중대한 위험이 있습니다. 존재하지 않는 인덱스에 접근하려고 하면 프로그램이 패닉(panic)을 일으키며 종료됩니다:
let numbers = vec![10, 20, 30];
let invalid = numbers[5]; // 여기서 패닉이 발생합니다!두 번째 방법은 .get() 메서드를 사용하며, 이는 안전한 접근을 제공합니다:
let numbers = vec![10, 20, 30, 40];
let first = numbers.get(0); // Some(10)을 반환합니다
let invalid = numbers.get(5); // None을 반환합니다.get() 메서드는 Option을 반환합니다. 인덱스가 존재하면 Some(value)를, 존재하지 않으면 None을 반환합니다. 이는 요소가 존재하지 않을 가능성을 처리하도록 강제하여, 충돌을 방지하고 코드를 더 견고하게 만듭니다.
챌린지
쉬움벡터 numbers와 인덱스 idx를 매개변수로 받아, 안전한 접근 방식을 사용하여 해당 인덱스의 요소를 반환하는 get_element_at 함수를 작성하세요.
요소를 안전하게 접근하기 위해 .get() 메서드를 사용하세요. 인덱스가 존재하면 해당 값을 반환하고, 존재하지 않으면 기본값으로 -1을 반환하세요.
매개변수:
numbers(Vec<i32>): 접근할 벡터idx(i32): 가져올 인덱스
반환값: 주어진 인덱스의 요소, 또는 인덱스가 존재하지 않을 경우 -1 (i32)
치트 시트
Rust는 벡터 요소에 접근하기 위한 두 가지 방법을 제공합니다:
대괄호를 사용하는 인덱스 구문:
let numbers = vec![10, 20, 30, 40];
let first = numbers[0]; // 10을 가져옴
let third = numbers[2]; // 30을 가져옴이 방법은 인덱스가 존재하지 않으면 패닉(panic)이 발생합니다:
let invalid = numbers[5]; // 패닉이 발생합니다!안전한 접근을 위한 .get() 메서드:
let numbers = vec![10, 20, 30, 40];
let first = numbers.get(0); // Some(10)을 반환함
let invalid = numbers.get(5); // None을 반환함.get() 메서드는 Option 타입을 반환합니다. 인덱스가 존재하면 Some(value)를, 존재하지 않으면 None을 반환합니다. 이는 프로그램 충돌을 방지하며 누락된 요소에 대한 명시적인 처리를 요구합니다.
직접 해보기
fn get_element_at(numbers: Vec<i32>, idx: i32) -> i32 {
// 여기에 코드를 작성하세요
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.