Option<T>은 Rust 표준 라이브러리의 매우 핵심적인 열거형(enum)이며, 다음 두 가지 variant를 가집니다:
enum Option<T> {
Some(T),
None,
}
여기에는 값의 존재/부재를 표현하기 위한 다양한 메소드가 정의되어 있습니다.
✅ 주요 메소드 목록 (범주별)
📦 1. 값 접근/변환
| 메서드 | 설명 |
|---|
is_some() | Some이면 true 반환 |
is_none() | None이면 true 반환 |
as_ref() | Option<&T>로 변환 |
as_mut() | Option<&mut T>로 변환 |
unwrap() | Some이면 값을 꺼내고, None이면 패닉 |
expect(msg) | None일 때 패닉, 메시지 출력 |
unwrap_or(default) | Some이면 값, None이면 기본값 반환 |
unwrap_or_else(f) | None이면 함수 호출로 기본값 반환 |
unwrap_or_default() | None이면 T::default() 사용 |
🔄 2. 매핑/변환
| 메서드 | 설명 |
|---|
map(f) | Some이면 함수 적용 후 Some |
map_or(default, f) | Some이면 f(value), None이면 기본값 |
map_or_else(default_fn, f) | Some이면 f(value), None이면 default_fn() |
🔀 3. 다른 Option과 조합
| 메서드 | 설명 |
|---|
and(optb) | 둘 다 Some이면 두 번째 반환, 아니면 None |
and_then(f) | Some이면 함수 결과(Option) 반환 |
or(optb) | 첫 번째가 Some이면 그대로, 아니면 두 번째 |
or_else(f) | 첫 번째가 None이면 함수 호출 결과 사용 |
xor(optb) | 하나만 Some이면 반환, 둘 다 아니면 None |
⚙️ 4. 필터링/판별
| 메서드 | 설명 |
|---|
filter(predicate) | Some이고 조건 만족하면 유지, 아니면 None |
🔧 5. 기타
| 메서드 | 설명 |
|---|
ok_or(err) | Some → Ok(value), None → Err(err) |
ok_or_else(f) | None이면 f()로 Err 생성 |
transpose() | Option<Result<T, E>> → Result<Option<T>, E> |
flatten() | Option<Option<T>> → Option<T> |
🎯 사용 예시
let val: Option<i32> = Some(10);
val.is_some();
val.unwrap();
val.map(|x| x * 2);
val.unwrap_or(0);
🧠 꿀팁
unwrap()은 실제 서비스 코드에서 거의 사용하지 않습니다. (패닉 위험)
- 실무에서는
map, and_then, unwrap_or_else, ok_or를 자주 활용합니다.
Option은 match 없이도 메소드 체이닝으로 대부분 처리 가능하게 설계되어 있습니다.
필요하시면 Result<T, E> 메소드 목록이나 Option을 사용하는 패턴 매칭 예제도 드릴 수 있습니다.