두 연산자는 에러 처리와 결과 값의 추출을 간편하게 수행하기 위해 사용됩니다.
1. `unwrap`:
- `Option` 또는 `Result` 타입에서 값을 안전하게 추출합니다.
- `unwrap`은 `Option` 타입에서 `Some` 값을 추출하거나, `Result` 타입에서 `Ok` 값을 추출합니다.
- `unwrap`은 값의 존재 여부를 검사하지 않고, 값을 강제로 추출합니다. 따라서, 값이 없는 경우(`None` 또는 `Err`)에는 패닉을 일으킬 수 있습니다.
- 주로 디버깅이나 간단한 예제 코드 작성 시 사용되며, 실제 상용 코드에서는 에러 처리를 명시적으로 수행하는 것이 권장됩니다.
2. `?` (Question Mark Operator):
- `?` 연산자는 함수나 메서드 내에서 `Result`를 반환하는 표현식에서 사용됩니다.
- `?`은 결과 값을 추출하여 해당 값이 `Ok`인 경우에는 값을 반환하고, `Err`인 경우에는 현재 함수를 호출한 곳으로 `Err` 값을 전파합니다.
- `?`은 에러 처리를 간편하게 수행할 수 있도록 도와줍니다. 코드의 가독성과 안전성을 높여줍니다.
- `?`을 사용하려면 현재 함수가 반환하는 타입이 `Result` 타입이어야 합니다.
`unwrap`과 `?`의 사용 이유는 다음과 같습니다:
- `unwrap`은 값이 확실히 존재할 때, 간단하게 값을 추출하기 위해 사용될 수 있습니다. 하지만 값이 없는 경우에는 패닉을 일으킬 수 있으므로 주의해야 합니다.
- `?`은 함수나 메서드 내에서 에러 처리를 간단하게 수행하고, 에러를 전파하여 중첩된 에러 처리를 줄일 수 있습니다. 코드의 가독성을 향상시키고, 안전한 에러 처리를 도와줍니다.
`unwrap`은 주의해서 사용해야 하며, 일반적으로 실제 상용 코드에서는 명시적인 에러 처리와 함께 `?`을 사용하는 것이 권장됩니다. 이를 통해 안전성과 유지보수성을 높일 수 있습니다.
'Rust' 카테고리의 다른 글
[RUST] match (127) | 2023.08.10 |
---|---|
[RUST] if let (78) | 2023.08.09 |
[RUST] Some (38) | 2023.08.06 |
[Rust] mod와 파일 시스템 (109) | 2023.07.15 |
[Rust] 주석 (107) | 2023.07.13 |