파이썬/타입 힌트

Python 타입힌트: Optional 타입 활용법

Data Jun 2025. 9. 10. 15:28

Python에서 어떤 값은 있을 수도 있고, 없을 수도 있습니다.
예를 들어, 함수가 성공하면 결과를 반환하고, 실패하면 None을 반환하는 경우가 대표적이죠.

이때 타입힌트를 통해 "값이 특정 타입일 수도 있고, None일 수도 있다" 라는 의미를 명확하게 표현하는 것이 바로 Optional 타입입니다.

 

Optional의 기본 개념

Optional[T]는 **Union[T, None]**의 축약형입니다. 즉, 특정 타입 T 또는 None을 허용한다는 뜻입니다.

from typing import Optional

def find_user(user_id: int) -> Optional[str]:
    if user_id == 1:
        return "진우"
    return None

print(find_user(1))   # "진우"
print(find_user(2))   # None

여기서 반환 타입 Optional[str]은 “문자열이거나 None일 수 있다” 라는 의미입니다. 

 

Optional을 인자 타입으로 사용하기

Optional은 함수 인자의 기본값이 None일 때 자주 사용됩니다.

from typing import Optional

def greet(name: Optional[str] = None) -> str:
    if name is None:
        return "Hello, Guest!"
    return f"Hello, {name}!"

print(greet())           # "Hello, Guest!"
print(greet("진우"))     # "Hello, 진우!"

이 경우 name은 str 또는 None을 가질 수 있습니다.

 

Optional과 타입 체크

Optional로 지정된 값은 실제 사용 시 반드시 None 여부를 체크하는 것이 안전합니다.

def safe_upper(text: Optional[str]) -> str:
    if text is None:
        return "EMPTY"
    return text.upper()

print(safe_upper("hello"))  # "HELLO"
print(safe_upper(None))     # "EMPTY"

타입힌트를 사용하면 IDE가 text가 None일 수도 있음을 인식하고, .upper() 같은 메서드를 바로 호출할 경우 경고를 줄 수 있습니다.

 

정리

  • Optional[T]는 Union[T, None]의 축약형
  • 함수의 반환값이나 기본값이 None인 인자에 자주 사용
  • Optional로 지정된 값은 실제 사용 시 None 체크가 필요
  • Python 3.10+ 에서는 Optional[str] 대신 str | None 문법을 권장

Optional을 적절히 사용하면 코드에서 None 가능성을 명시적으로 표현할 수 있어, 가독성과 안정성을 동시에 높일 수 있습니다.