파이썬 타입 어노테이션

2025. 1. 11.·언어/Python

🐢: 타입 어노테이션에 대해 알아보기 전에 먼저 동적 타이핑 개념에 대해 먼저 알아볼게요!

 

파이썬

동적 프로그래밍 언어

동적 타이핑(Dynamic Typing)

 # 변수에 할당되는 값이 그때그때 타입을 결정

 # 변수 자체에는 타입이 정해져 있지 않음

--🐢

정적 타이핑 / 동적 타이핑

정적 타이핑

컴파일 시점에 변수의 자료형이 결정되고, 이후에는 변경할 수 없음

예: C, C++, Java(전통적인 방식), Go 등

“int x = 10;” 처럼 x를 선언하는 시점에 자료형을 명시하고, 나중에 x에 문자열을 할당할 수 없음

컴파일러는 미리 자료형을 알고 있으므로, 잘못된 타입 사용은 컴파일 에러

 

동적 타이핑

런타임(프로그램 실행 중)에 변수의 자료형이 결정

예: Python, JavaScript, Ruby 등

변수에는 언제든지 다른 자료형의 값을 할당할 수 있고, 컴파일 단계(또는 정적 검사)가 없어도 코드가 실행

잘못된 타입 사용이 런타임에야 드러날 수 있음

장점: 타입에 자유로워 유연한 코딩이 가능해 쉽고 빠르게 코드 작성 가능

단점: 정적 검사로 잡을 수 있는 오류를 실행 중에야 알 수 있고, 개발 규모가 커질수록 변수 타입 추적 어려워짐

-🐢-

타입 어노테이션(Type Annotation)

변수나 함수의 매개변수, 반환값 등에 명시적으로 자료형 힌트를 붙이는 기능

파이썬 3.5에서 PEP 484를 통해 표준화

정적 타입 분석 도구(예: mypy, pyright 등)와 IDE 보조(자동 완성, 오류 검사)에 활용

 

기본 문법

# 변수에 대한 어노테이션

age: int = 20
name: str = "Alice"
pi: float = 3.14159

변수명 뒤에 : 를 붙이고, 타입 표기

타입 힌트를 줄 뿐, 실제로 자료형을 강제 X(파이썬은 동적 타이핑)

 

# 함수 매개변수 및 리턴 타입

def greet(name: str) -> str:
    return f"Hello, {name}"

def add(a: int, b: int) -> int:
    return a + b

각 파라미터 뒤에 : <type> 를 붙이고, 함수 선언부 끝에 -> <type>로 리턴 타입을 표시

입력값, 반환값의 의도한 자료형을 명확히 표현, IDE나 타입 체커에서 잘못된 사용을 감지 O

 

typing 모듈 사용

파이썬 표준 라이브러리인 typing 모듈에는 다양한 타입 힌트 구문이 정의

# List, Dict, Tuple, Set, Union 등

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

def process_names(names: List[str]) -> Dict[str, int]:
    """예: 이름별로 길이를 매핑한 딕셔너리를 반환"""
    return {name: len(name) for name in names}

def mixed_data(data: List[Union[int, str]]) -> None:
    """정수나 문자열이 섞인 리스트"""
    ...

Union[int, str] 는 “int 또는 str” 타입을 의미

파이썬 3.10부터는 | 연산자로 Union을 표현 가능(예: int | str)

 

# Optional, Any, Callable 등

Optional[T]

T또는 None이 될 수 있음을 의미(Union[T, None]와 동일)

from typing import Optional

def find_user(id: int) -> Optional[str]:
    # 없으면 None 반환
    return "Alice"

Any

어떤 타입이든 허용(정적 검사 불가)

def do_something(x: Any) -> Any:
    return x

Callable[ , R]

함수(또는 호출 가능한 객체) 타입. 인자와 반환 타입 명시

from typing import Callable

def executor(func: Callable[[int, int], int], a: int, b: int) -> int:
    return func(a, b)

🐢--

타입 어노테이션 목적과 한계

정적 분석 도구와 IDE 지원

mypy, pyright, pylance 같은 정적 분석기로 코드를 검사하면, 타입 불일치를 미리 찾아낼 수 있음

IDE(예: VSCode, PyCharm 등)에서 자동 완성, 오류 표시 등이 풍부해짐

 

코드 가독성과 유지보수

파라미터와 반환값의 타입이 명확하게 드러나므로, 협업 시 코드 이해도가 올라감

 

런타임 강제는 없음

파이썬의 타입 어노테이션은 런타임에 타입을 강제하지 않음(체크가 아닌 힌트라)

즉, 어노테이션을 써도 여전히 동적 타이핑이 기본이며, 잘못된 타입을 넣어도 mypy 등을 사용하지 않으면 오류 없이 실행

저작자표시 비영리 변경금지 (새창열림)

'언어 > Python' 카테고리의 다른 글

정규 표현식(Regular Expression)  (3) 2025.01.13
이터레이터/제너레이터  (1) 2025.01.10
클로저/데코레이터  (1) 2025.01.09
유니코드 문자열  (1) 2025.01.08
Threading 모듈  (2) 2025.01.07
'언어/Python' 카테고리의 다른 글
  • 정규 표현식(Regular Expression)
  • 이터레이터/제너레이터
  • 클로저/데코레이터
  • 유니코드 문자열
우는거북이
우는거북이
  • 우는거북이
    거북이는 울고 있다
    우는거북이
  • 전체
    오늘
    어제
    • 알아보기 (78)
      • 데이터통신 (12)
      • 네트워크프로그래밍 (0)
      • 언어 (16)
        • Python (15)
        • C언어 (1)
      • 알고리즘 (7)
      • 백준 (22)
      • 자료구조 (10)
      • 컴퓨터네트워크 (6)
      • AI (4)
      • 운영체제 (1)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
우는거북이
파이썬 타입 어노테이션
상단으로

티스토리툴바