PEP 484–Type Hints

PEP 484–Type Hints Python에 타입 힌트(Type Hints)를 도입하여 함수의 인자와 반환값에 대한 타입을 명시할 수 있도록 하는 표준을 정의 Python 3.5부터 도입됨. 코드의 가독성을 높이고 정적 타입 분석 도구가 코드를 검사할 수 있도록 돕는다. PEP 484는 Python의 동적 타이핑 특성을 유지하면서, 타입 힌트를 통해 코드의 품질과 유지보수성을 향상시키는 것을 목표로 한다. 주요 내용 함수 주석을 통한 타입 힌트 함수 인자와 반환값에 대한 타입 정보를 제공하여 코드의 의도를 명확히 한다. 예를 들어, 문자열을 인자로 받고 문자열을 반환하는 함수는 다음과 같이 정의할 수 있다. 1 2 3 4 def greeting(name: str) -> str: return 'Hello ' + name` # `name: str`: `name` 인자는 문자열이어야 함을 나타냅니다. # `-> str`: 함수가 문자열을 반환함을 나타냅니다. 정적 타입 검사 타입 힌트는 런타임에 강제되지 않으며, 정적 분석 도구(예: mypy)를 사용하여 코드의 타입 일관성을 검사할 수 있다. 이는 코드 작성 시 오류를 미리 발견하고 수정할 수 있게 도와준다. 타입 힌트 모듈 typing 모듈을 통해 다양한 타입 힌트를 제공한다. 예를 들어, 리스트, 딕셔너리와 같은 컨테이너 타입 및 제네릭(Generic) 타입을 지원한다. 유연한 사용 타입 힌트는 선택 사항이며, Python은 여전히 동적 타이핑 언어로 남아 있다. 즉, 모든 함수에 타입 힌트를 추가할 필요는 없다. 예제 간단한 예시 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # 1. 기본적인 타입 힌트 사용 def greeting(name: str) -> str: # name 파라미터는 문자열(str) 타입이어야 함을 나타냄 # -> str 은 함수가 문자열을 반환함을 나타냄 return f"Hello, {name}!" # 2. 여러 기본 타입들의 사용 def calculate_total(quantity: int, price: float) -> float: # quantity는 정수(int), price는 실수(float) 타입 # 반환값은 실수(float) 타입 return quantity * price # 3. 리스트 타입 힌트 사용 from typing import List def get_first_name(names: List[str]) -> str: # names는 문자열 리스트임을 나타냄 # List[str]은 모든 요소가 문자열인 리스트를 의미 return names[0] if names else "" # 4. 옵셔널 타입 사용 from typing import Optional def find_user(user_id: Optional[int]) -> Optional[str]: # user_id는 정수이거나 None일 수 있음을 나타냄 # 반환값도 문자열이거나 None일 수 있음 if user_id is None: return None return f"User_{user_id}" 복잡한 예시 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 from typing import Dict, Tuple, Union, Callable # 5. 딕셔너리와 복합 타입 def process_user_data( user_info: Dict[str, Union[str, int]] ) -> Tuple[str, int]: # Dict[str, Union[str, int]]는 # - 키는 문자열이고 # - 값은 문자열 또는 정수인 딕셔너리를 의미 # Tuple[str, int]는 문자열과 정수로 구성된 튜플을 반환한다는 의미 name = user_info.get("name", "") age = user_info.get("age", 0) return name, age # 6. 함수 타입 힌트 def apply_operation( func: Callable[[int, int], int], x: int, y: int ) -> int: # Callable[[int, int], int]는 # - 두 개의 정수를 입력받고 # - 정수를 반환하는 함수를 의미 return func(x, y) # 7. 제네릭 타입 from typing import TypeVar, Sequence T = TypeVar('T') # 제네릭 타입 변수 정의 def first_element(sequence: Sequence[T]) -> Optional[T]: # Sequence[T]는 임의의 타입 T로 이루어진 시퀀스를 의미 # Optional[T]는 T 타입 또는 None을 반환할 수 있음을 의미 return sequence[0] if sequence else None 참고 및 출처

November 26, 2024 · 3 min · Me