[파이썬]타입 어노테이션

민서·2024년 3월 17일
0

파이썬문법

목록 보기
1/1

Motivation

자바와 같은 정적 언어는 컴파일 과정에서 변수의 타입을 엄격하게 체크하여 오류를 미리 예방한다. 반면 동적 언어인 파이썬은 실행 과정에서 타입을 체크하기 때문에 오류가 발생할 때까지 알 수 없다.
(변수 타입이 다르다면 자바는 컴파일 에러가 발생하고, 파이썬은 런타임가 발생한다.)

따라서 파이썬도 3.5버전부터는 코드 이해 향상, 오류 예방을 위해 타입 어노테이션이라는 기능을 지원하기 시작했다.

Code

변수 타입 어노테이션


# 이름: 문자열
name: str = "김철수"
# 나이: 정수
age: int = 30

# 이메일 목록: 문자열 리스트
emails = ["kim1@example.com", "kim2@example.com"]
# Python 3.8 이하 어노테이션
emails: list = ["kim1@example.com", "kim2@example.com"]
# Python 3.9 이상 어노테이션
emails: list[str] = ["kim1@example.com", "kim2@example.com"]

# 주소: 문자열 키-값 딕셔너리
address = {
    "도로명": "경기도 파주시 광탄면 기산로 226",
    "우편번호": "10564"
}

# Python 3.8 이하 어노테이션
address: dict = {
    "도로명": "경기도 파주시 광탄면 기산로 226",
    "우편번호": "10564"
}
# Python 3.9 이상 어노테이션
address: dict[str, str] = {
    "도로명": "경기도 파주시 광탄면 기산로 226",
    "우편번호": "10564"
}

함수 타입 어노테이션

def 함수명(<필수 인자>: <인자 타입>, <선택 인자>: <인자 타입> = <기본값>) -> <반환 타입>:

위와 같은 형태로 작동하고, 아래는 다양한 예시이다.

def convert_to_string(number: int) -> str:
    return str(number)

def add_numbers(number1: int, number2: float = 3.5) -> float:
    return number1 + number2

def say_hello(person_name: str) -> None:
    print("Hi! " + person_name)

# Python 3.8 이하 타입 어노테이션
def duplicate_message(text: str, repetitions: int = 2) -> list:
    return [text] * repetitions

# Python 3.9 이상 타입 어노테이션
def duplicate_message(text: str, repetitions: int = 2) -> list[str]:
    return [text] * repetitions

# 타입을 확인하고 싶을때는 함수명.__annotations__을 통해 확인할 수 있다.

복잡한 형태

복잡한 타입 어노테이션을 추가할 때는 스탠다드 라이브러리의 typing 모듈을 사용할 수 있다.

from typing import Dict, List, Optional, Set, Tuple, Union

numbers: List[Optional[int]] = [1, None, 2]

distinct_numbers: Set[Union[int, float]] = {6, 7.5}

eyesight: Dict[str, float] = {"left": 1.0, "right": 0.9}

person_info: Tuple[int, str, List[float]] = (25, "John Doe", [1.0, 0.9])

한계 및 결론

어노테이션을 사용한다고 하더라도 타입오류로 인해 다른 경고나 오류를 발생시키지는 않고, 동일하게 런타임 에러를 발생시킨다. 하지만 명료하게 코드 작성자에게 힌트를 제공함으로써 휴먼에러를 어느정도 예방하고, 코드 이해 향상에 도움이 된다. 함수에서 인자의 상태를 확인하기 위해 디버깅할 때에는, assert문도 함께 사용할 수 있다.

profile
CS&ICE, Senior in The Catholic University of Korea. welcome to my page:D http://about.minseo.me/

0개의 댓글

관련 채용 정보