타입 어노테이션

현서·2025년 7월 9일

파이썬

목록 보기
23/27
post-thumbnail

1. 타입 어노테이션(Type Annotation)

변수나 함수의 데이터 타입을 명시적으로 표시해주는 기능.
파이썬은 기본적으로 동적 타이핑(dynamic typing) 언어이기 때문에 변수의 타입을 명시하지 않아도 된다.
하지만 코드의 가독성과 정적 분석 도구(myPy 등) 사용, IDE의 자동완성에 도움이 되기 때문에 타입 어노테이션을 사용하는 것이 좋다.

2. 변수 타입 어노테이션

실제로 name = 123 같은 다른 타입을 할당해도 파이썬이 에러를 내지는 않는다. (런타임에는 영향을 주지 않음)

name = '김사과'
name:str = '김사과'

age = 10
age: int = 10

height = 160.5
height: float = 160.5

is_lover = True
is_lover: bool = True

3. 리스트, 튜플, 딕셔너리, 세트

names = ['김사과', '오렌지', '반하나']
names: list[str] = ['김사과', '오렌지', '반하나']
print(names)

values: list[int | str] = [1, "two", 3, "four"]
print(values)

age = (25, 20)
age: tuple[int, int] = (25, 20) # tupel의 경우, 자리의 갯수만큼 씀.(int, int)
print(age)
numbers: tuple[int, ...] = (1, 2, 3, 4, 5) # 자리의 갯수 생략 가능 ...
print(numbers)

student_scores = {'김사과': 90.5, '오렌지': 88.3}
student_scores: dict[str, float] = {'김사과': 90.5, '오렌지': 88.3}
print(student_scores)

unique_numbers = {1, 2, 3, 3, 4}
unique_numbers: set[int] = {1, 2, 3, 3, 4}
print(unique_numbers)
['김사과', '오렌지', '반하나']
[1, 'two', 3, 'four']
(25, 20)
(1, 2, 3, 4, 5)
{'김사과': 90.5, '오렌지': 88.3}
{1, 2, 3, 4}

4. 함수

def add(a, b):
    return a + b

print(add(10, 3))
print(add('십', '삼'))
13
십삼
def add(a: int, b: int) -> int:
    return a + b

print(add(10, 3))
print(add('십', '삼'))

# 타입 어노테이션을 확인
add.__annotations__
13
십삼
{'a': int, 'b': int, 'return': int}
def greet(user: str | None) -> str:
    return f"Hello, {user or 'Guest'}"

5. 클래스

class Student:
    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age
    def __str__(self) -> str:
        return '이름: ' + self.name + ', 나이: ' + str(self.age)

def print_student(s: Student) -> None:
    print(f'이름: {s.name}, 나이: {s.age} 🎃')

student = Student('김사과', 20)
print(student)

print_student(student)
이름: 김사과, 나이: 20
이름: 김사과, 나이: 20 🎃

6. 옵셔널

변수가 특정 타입이거나 None일 수 있는 경우 Optional을 사용한다.

def Hello(name: str | None) -> str:
    if name is None:
        return "Hello, Guest!"
    return f"Hello, {name}!"

print(Hello("apple"))
print(Hello(None))
# print(Hello()) # None을 넣어야 함. 안 넣으면 error
Hello, apple!
Hello, Guest!
def find_user(user_id: int) -> str | None:
    if user_id == 1:
        return "apple"
    return None

result1 = find_user(1)
print(result1)
result2 = find_user(99)
print(result2)
apple
None
users: dict[int, str] = {1: "apple", 2: "banana"}

def get_user(user_id: int) -> str:
    return users.get(user_id, "알 수 없음")
print(get_user(1))
print(get_user(2))
print(get_user(100))
apple
banana
알 수 없음
users: dict[int, str] = {
    1: "apple",
    2: "banana"
}

def get_user(user_id: int) -> str | None:
    return users.get(user_id)
print(get_user(1))
print(get_user(2))
print(get_user(100))
apple
banana
None

7. Any

Any는 특정 타입을 지정할 수 없을 때 사용하는 타입 힌트용 특수 타입이다.

from typing import Any

def process(data: Any) -> None:
    print(data)
process("김사과")
process(1)
process(True)
process(100.5)
김사과
1
True
100.5
profile
The light shines in the darkness.

0개의 댓글