상세 컨텐츠

본문 제목

Type Annotation (1) - 기본 자료구조 1 (int, str, float, bool)

개발/python-객체지향프로그래밍(OOP)

by Matthew0633 2022. 5. 21. 23:43

본문

Type Annotation (Type Hint)

동적언어인 파이썬에서는 정적언어와 달리 변수 또는 함수에 type을 엄격하게 명시하지 않고 사용할 수 있어, 생산성이 뛰어난 장점이 있다. 그러나 type 이 명시적으로 보이지 않아, 다른 사람의 코드를 사용하거나 읽는데 있어 불폄함을 느낄 수 있다. 정적언어처럼 type 의 명시성을 높이기 위해 사용할 수 있는 것이 바로 Type Annotation 이다

기본 자료구조 1 (int, str, float, bool)

변수에 대해 type hint 명시는 간단하게, 변수명 오른쪽에 콜론과 함께 type 을 적어주면 된다.

int_var: int = 88
str_var: str = "hello world"
float_var: float = 88.9
bool_var: bool = True

한가지 주의할 것은, type hint 라는 제약 때문에 해당 변수값이 다른 자료형의 값으로 수정되어도 에러가 발생하지는 않는다. 따라서, 수월한 개발과 유지보수를 위해서는 type check을 위한 방어코드를 정의하는 것이 좋다. 이 때 사용할 수 있는 것이 isinstance(object, type) 이다. 조건문을 통해, 자료형이 다를 경우 예외발생을 유도할 수 있다 (type_check1) . 만약 assert까지 활용하면, 이를 한줄로 작성할 수 있다(type_check2).

def type_check1(obj, type_class) -> None:
    """
    <자료형 검사 수행>

    object 가 type_class 가 아닐 경우, 메시지와 함께 TypeError 를 발생시킨다.
    Ex. TypeError : obj should be {type_class}"
    """
    if isinstance(obj, type_class):
        pass
    else:
        raise TypeError(f"obj should be {type_class}")

def type_check2(obj, type_class) -> None:
    """
    <자료형 검사 수행>

    object 가 type_class 가 아닐 경우, 메시지와 함께 예외를 발생시킨다.
    Ex. AssertionError: obj should be {type_class}
    """
    assert isinstance(obj, type_class) f"obj should be {type_class}"

def cal_add(x: int, y: int) -> int:
    type_check1(x, int)
    type_check2(y, int)
    return x + y


print(cal_add(1, 3))   # 4
print(cal_add('a', 1)) # TypeError
print(cal_add(1, 'a')) # AssertionError

관련글 더보기

댓글 영역