rust Option<T> None

agnusdei·2025년 1월 29일
0

🟢 Option<T> 이해하기 – null과 비교해서 쉽게 설명!

Rust에는 null 값이 없다는 걸 알고 있지?
대신에 값이 있거나 없음을 표현하기 위해 Option<T>라는 열거형(enum)을 사용해.


🔴 1. null이 있는 언어 (예: C, Java, Python)

C나 Java 같은 언어에서는 변수가 아무 값도 가지지 않을 때 null을 사용해.

String name = null;  // 값이 없음을 의미

하지만 Rust에서는 null이 없고, 대신 Option<T>을 사용해.


🟢 2. Option<T>란?

Option<T>은 값이 있을 수도 있고, 없을 수도 있음을 표현하는 열거형(enum)이야.

enum Option<T> {
    Some(T),  // 값이 있는 경우
    None,     // 값이 없는 경우
}
  • Some(T): 값이 있는 경우
  • None: 값이 없는 경우 (null처럼 동작)

🔵 3. Option<T> 예제 – 값이 있을 수도 있고 없을 수도 있는 경우

fn find_number(n: i32) -> Option<i32> {
    if n > 0 {
        Some(n * 2)  // 값이 있으면 Some(값)
    } else {
        None         // 값이 없으면 None
    }
}

fn main() {
    let result1 = find_number(10);  // Some(20)
    let result2 = find_number(-5);  // None

    println!("{:?}", result1); // 출력: Some(20)
    println!("{:?}", result2); // 출력: None
}

🚀 설명:

  • find_number(10) → 양수이므로 Some(20)을 반환
  • find_number(-5) → 음수이므로 None을 반환

즉, 값이 있을 때만 Some(값), 없으면 None을 사용하는 거야.


🟡 4. None을 처리하는 방법

Option<T> 타입은 그냥 사용할 수 없어.
값이 있을 때(Some)만 꺼내서 사용해야 해!

fn main() {
    let number: Option<i32> = Some(5);
    
    // match로 처리하기
    match number {
        Some(n) => println!("값: {}", n),  // 값이 있을 때
        None => println!("값이 없음"),       // 값이 없을 때
    }
}

✅ 출력:

값: 5

🔥 5. unwrap() – 값이 없으면 에러 발생

fn main() {
    let x: Option<i32> = Some(42);
    let y: Option<i32> = None;

    println!("{}", x.unwrap()); // 42
    println!("{}", y.unwrap()); // 실행하면 에러 발생!
}

🚨 None.unwrap()을 하면 프로그램이 죽어버려! (panic 발생)

👉 안전하게 처리하려면?

  • match
  • unwrap_or(default 값) 사용
fn main() {
    let y: Option<i32> = None;
    
    // 값이 없으면 기본값(0) 사용
    let value = y.unwrap_or(0);  
    println!("{}", value); // 0
}

✅ 최종 정리

언어값이 없음 표현
C, Java, Pythonnull
RustNone (Option 사용)

🚀 Option<T> 핵심 포인트

  1. Rust에는 null이 없다!
  2. 값이 없을 수도 있을 때 Option<T> 사용
  3. Some(값) 또는 None
  4. 직접 사용하면 에러! match, unwrap_or()로 안전하게 다루기
profile
DevSecOps ⚙️ + CTF🚩

0개의 댓글