Option<T>

백엔드&인프라 추종자·2025년 6월 15일

rust 공부

목록 보기
4/14

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)SomeOk(value), NoneErr(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(); // true
val.unwrap();  // 10
val.map(|x| x * 2); // Some(20)
val.unwrap_or(0); // 10

🧠 꿀팁

  • unwrap()은 실제 서비스 코드에서 거의 사용하지 않습니다. (패닉 위험)
  • 실무에서는 map, and_then, unwrap_or_else, ok_or를 자주 활용합니다.
  • Optionmatch 없이도 메소드 체이닝으로 대부분 처리 가능하게 설계되어 있습니다.

필요하시면 Result<T, E> 메소드 목록이나 Option을 사용하는 패턴 매칭 예제도 드릴 수 있습니다.

profile
AI 답변 글을 주로 올립니다.

0개의 댓글