파이썬 3.5 버전부터 추가된 변수와 함수에 타입을 지정할 수 있는 타입 어노테이션 기능에 대해 알아봅니다.
a = 1
type(a) # <class 'int'>
a = "1"
type(a) # <class 'str'>
int a = 1; // a 변수를 int형으로 지정
a = "1"; // a 변수에 문자열을 대입할 수 없으므로 컴파일 에러
: int와 같이 콜론과 타입을 작성하여 num 변수가 int형이라는 것을 명시. num: int = 1
name: str = "홍길동"
numbers: list = [1, 2, 3]
-> int처럼 화살표 기호를 사용해 함수의 반환값 타입도 명시할 수 있다. def add(a: int, b: int) -> int:
return a + b
def greet(name: str) -> str:
return f"안녕하세요, {name}님!"
def get_user_info(user_id: int) -> dict:
return {"id": user_id, "name": "홍길동"}
기본 타입 어노테이션(int, str, list 등)만으로도 많은 경우를 처리할 수 있지만, 더 구체적인 타입 정보가 필요할 때 typing 모듈 사용.
파이썬 3.9부터는 내장 타입(list, dict, tuple 등)을 직접 사용할 수 있게 되어 typing 모듈의 List, Dict, Tuple을 가져올 필요가 없어졌다.
# 파이썬 3.5~3.8: typing 모듈 필수
from typing import List, Dict, Tuple, Optional
numbers: List[int] = [1, 2, 3]
user_info: Dict[str, int] = {"age": 30}
# 파이썬 3.9 이상: 내장 타입 사용 가능
numbers: list[int] = [1, 2, 3]
user_info: dict[str, int] = {"age": 30}
하지만 여전히 typing 모듈이 필요한 경우들이 있다.
from typing import Optional, Union, Callable, Any
# 1. Optional - None이 가능한 경우
user_name: Optional[str] = None # str 또는 None
# 2. Union - 여러 타입이 가능한 경우
user_id: Union[int, str] = "jenny" # 정수 또는 문자열 (user_id로 정수도 사용가능)
# 3. Callable - 함수 타입 지정
def process_data(callback: Callable[[int], str]) -> str:
return callback(42)
# 4. Any - 모든 타입 허용 (비상시에만 사용)
unknown_data: Any = {"key": "value"}
# 5. 복잡한 중첩 구조
nested_data: dict[str, list[Optional[int]]] = {
"scores": [95, None, 87, None]
}
def add(a: int, b: int) -> int:
return a+b
result = add(3, 3.4)
print(result) # 6.4
pip install mypy 설치해야 한다.