1. Result 타입
Result 타입은 성공과 실패를 표현하는 열거형(Enum)으로, 두 가지 변형이 있습니다.
- Ok(T): 성공적인 결과를 포함
- Err(E): 에러를 포함
fn divide(a: f64, b: f64) -> Result<f64, String> {
if b == 0.0 {
Err(String::from("0으로 나눌 수 없음"))
} else {
Ok(a/b)
}
}
fn main () {
match divide(10.0, 2.0) {
Ok(result) => println!("Result: {}", result),
Err(e) => println!("Error: {}", e)
}
match divide(10.0, 0.0) {
Ok(result) => println!("Result: {}", result),
Err(e) => println!("Error: {}", e)
}
}
2. Option 타입
Option은 같이 있을 수도 있고 없을 수도 있는 경우를 표현하는 열거형으로 두 가지 변형이 있습니다.
- Some(T): 값이 존재함을 나타냄
- None: 값이 존재하지 않음을 나타냄
fn find_item(items: &[&str], search: &str) -> Option<usize> {
for(index, &item) in items.iter().enumerate() {
if item == search {
return Some(index);
}
}
None
}
fn main() {
let items = ["사과", "바나나", "멜론"];
match find_item(&items, "바나나") {
Some(index) => println!("바나나의 인덱스: {}", index),
None => println!("바나나를 찾을 수 없음"),
}
match find_item(&items, "포도") {
Some(index) => println!("포도의 인덱스: {}", index),
None => println!("포도를 찾을 수 없음"),
}
}
3. 에러 전파
Rust에서는 에러를 전파할 때 ? 연산자를 사용하여 간편하게 처리할 수 있습니다. 이 연산자는 Result 또는 Option 타입의 값을 반환하는 함수에서 사용됩니다.
fn may_fail() -> Result<(), String> {
// 실패할 수 있는 작업
Err(String::from("Fail!"))
}
fn process() -> Result<(), String> {
may_fail()?;
Ok(())
}
fn main() {
match process() {
Ok(_) => println!("Success!"),
Err(e) => println!("Error: {}", e)
}
}
GitHub - Koras02/rust-tutorial: https://thinky.tistory.com/category/Back-End/Rust
https://thinky.tistory.com/category/Back-End/Rust. Contribute to Koras02/rust-tutorial development by creating an account on GitHub.
github.com
LIST
'Back-End > Rust' 카테고리의 다른 글
[Rust] 8장 제네릭 (0) | 2025.03.12 |
---|---|
[Rust] 7장 모듈 (0) | 2025.03.10 |
[Rust] 5장 패턴 매칭(Pattern Matching) (0) | 2025.03.06 |
[Rust] 4장 데이터 타입(Data Types) (0) | 2025.03.02 |
[Rust] 3장 빌림(Borrowing) (0) | 2025.02.27 |