본문 바로가기
Python

Type Hinting

by 햣둘 2025. 6. 24.

Type Hinting(타입 힌팅)

변수나 함수의 인자, 반환값 등에 대해 예상되는 데이터 타입을 명시하는 기능

파이썬은 원래 동적 타이핑 언어라서 변수의 타입을 따로 선언하지 않아도 되지만, 

코드의 가독성과 안정성, 그리고 IDE의 자동완성 및 정적 분석 도구(ex.mypy) 지원을 위해 타입 힌팅이 점점 많이 사용되고 있음.

 

데이터 엔지니어가 Type Hinting을 쓰는 이유

데이터 엔지니어는 주로 다음과 같은 작업을 함 :

- ETL 파이프라인 작성 (ex. Airflow, Spark)

- 다양한 포맷의 데이터 로딩 및 처리 (JSON, CSV, DB row 등)

- API 연동, 로그 분석, 배치 처리

- 테스트, 코드 유지보수

 

이런 상황에서 타입 힌팅은 다음을 도와줌 : 

- 데이터 스키마 명확화

- 코드 리팩토링 안정성 증가

- 협업 시 실수 방지

- 정적 분석 도구(mypy, Pyright 등)로 버그 미리 발견

 

데이터 엔지니어가 자주 쓰게 될 Type Hinting 예시

1. List, Dict, Tuple, Optional

2. TypedDict : JSON-like 구조를 명확하게 표현

3. @dataclass : ETL에서 레코드 모델링

4. Union, Any : 다양한 형 데이터 처리

5. Iterable, Generator : 대용량 데이터 처리

6. Literal, Final (상태값, 고정된 값 관리)

꼭 알고 가야 할 Type Hinting 개념

List, Dict, Tuple, Optional - 기본 데이터 처리의 핵심

TypedDict, dataclass - JSON/Row 구조 정의에 필수

Union, Any - 유연한 타입 처리

Generator, Iterable - 로그/데이터 스트리밍

Literal, Final - 상수 관리, 상태 코드 정의

Callable - 함수 파이프라인 구성 시 유용

Protocol, Generic - 더 복잡한 타입 시스템 구현 시

 

예시

List[int]는 정수로 이루어진 리스트

from typing import List

def total(nums: List[int]) -> int:
	return sum(nums)
    
print(totla([1,2,3,])) # 출력 : 6

 

 

Dict[str, int]는 문자열 key와 정수 value를 가지는 딕셔너리

from typing import Dict

def sum_scores(scores: Dict[str, int]) -> int :
	return sum(scores.value())
    
print(sum_score({"minsu":70, "chulsu":95})) # 출력 165

 

Tuple[str, int]는 문자열과 정수로 이루어진 고정된 순서의 튜플

from typing import Tuple

def name_and_age() -> Tuple[str, int] :
	return("Yeji", 23)
    
print(name_and_age()) # 출력 : ("Yeji", 23)

 

Optional[int]는 정수 또는 None일 수 있다는 뜻

사실 Optional[X]는 Union[X,None]의 줄임말

from typing import Optional

def get_age(name:str) -> Optional[int]:
	if name == "Yeji":
    	return 23
    return None

print(get_age("Yeji")) # 출력 : 23
print(get_age("Unknown")) # 출력 : None

'Python' 카테고리의 다른 글

Context Managers  (1) 2025.06.25
List Comprehensions  (2) 2025.06.23
나도코딩 파이썬 11장 - 모듈과 패키지  (0) 2023.03.31
나도코딩 파이썬 10장 - 예외 처리  (0) 2023.03.31
나도코딩 파이썬 9장 - 클래스  (0) 2023.03.27