SeouliteLab

파이썬의 Generic 타입: 다양한 타입의 유연한 지원 본문

프로그래밍

파이썬의 Generic 타입: 다양한 타입의 유연한 지원

Seoulite Lab 2024. 4. 1. 16:36

파이썬의 Generic 타입은 여러 종류의 타입을 지원하여 코드의 유연성을 높여줍니다. 이번 글에서는 파이썬의 Generic 타입에 대해 알아보고 다양한 활용 예시를 살펴보겠습니다.

예제 1: Generic 함수

from typing import TypeVar, List

T = TypeVar('T')

def first_element(items: List[T]) -> T:
    return items[0]

numbers = [1, 2, 3, 4, 5]
first_num = first_element(numbers)
print("First number:", first_num)
# 출력 결과: First number: 1

names = ["Alice", "Bob", "Charlie"]
first_name = first_element(names)
print("First name:", first_name)
# 출력 결과: First name: Alice

위 예제에서는 Generic 타입을 사용하여 리스트의 첫 번째 요소를 반환하는 함수를 정의합니다. 이 함수는 리스트에 포함된 요소의 타입에 관계없이 동작합니다.

예제 2: Generic 클래스

from typing import TypeVar

T = TypeVar('T')

class Box(Generic[T]):
    def __init__(self, item: T):
        self.item = item

    def get_item(self) -> T:
        return self.item

int_box = Box(10)
print("Item in int box:", int_box.get_item())
# 출력 결과: Item in int box: 10

str_box = Box("Hello")
print("Item in string box:", str_box.get_item())
# 출력 결과: Item in string box: Hello

이 예제에서는 Generic 클래스를 정의하여 다양한 타입의 아이템을 담을 수 있는 상자를 만듭니다. 이 클래스는 인스턴스화될 때 특정 타입의 아이템을 받아들이고, 이를 반환하는 메서드를 제공합니다.

예제 3: Generic 함수와 제약

from typing import TypeVar, Iterable

T = TypeVar('T', int, float)

def sum_values(items: Iterable[T]) -> T:
    return sum(items)

numbers = [1, 2, 3, 4, 5]
total = sum_values(numbers)
print("Total sum:", total)
# 출력 결과: Total sum: 15

float_numbers = [1.5, 2.5, 3.5]
total_float = sum_values(float_numbers)
print("Total sum of floats:", total_float)
# 출력 결과: Total sum of floats: 7.5

위 예제에서는 Generic 함수에 제약을 추가하여 int 또는 float 타입의 요소만을 받아들이도록 합니다. 이를 통해 함수의 유연성을 유지하면서도 특정 타입의 요구 사항을 강제할 수 있습니다.