파이썬에서는 제너릭(Generic) 타입을 사용하여 여러 가지 자료형에 대해 동작할 수 있는 유연한 데이터 구조를 만들 수 있습니다. 제너릭 타입은 주로 typing
모듈을 사용하여 구현합니다. 여기서는 제너릭을 이용해 세 개의 요소를 저장하는 Triple
자료구조를 만들어 보겠습니다.
제너릭을 이용한 Triple
자료구조
Triple
클래스는 세 개의 요소를 저장할 수 있으며, 각 요소의 타입은 유연하게 설정될 수 있습니다. 이를 위해 typing
모듈의 Generic
과 TypeVar
를 사용합니다. Triple
의 각 요소는 서로 다른 타입일 수 있으며, 이를 안전하게 다루기 위해 제너릭을 도입합니다.
예제 코드:
from typing import Generic, TypeVar
# 세 개의 서로 다른 타입을 위한 제너릭 타입 변수 정의
T1 = TypeVar('T1')
T2 = TypeVar('T2')
T3 = TypeVar('T3')
# 제너릭을 이용한 Triple 클래스 정의
class Triple(Generic[T1, T2, T3]):
def __init__(self, first: T1, second: T2, third: T3):
self.first = first
self.second = second
self.third = third
# 각 요소에 접근하는 메서드
def get_first(self) -> T1:
return self.first
def get_second(self) -> T2:
return self.second
def get_third(self) -> T3:
return self.third
# Triple 객체 출력 메서드
def display(self):
print(f"First: {self.first}, Second: {self.second}, Third: {self.third}")
# 사용 예제
# Triple 객체 생성 (타입: str, int, float)
triple = Triple("Python", 3, 3.14)
# 요소 출력
triple.display()
# 각 요소에 접근
print(f"First Element: {triple.get_first()}")
print(f"Second Element: {triple.get_second()}")
print(f"Third Element: {triple.get_third()}")
설명:
제너릭 타입 변수(T1, T2, T3):
TypeVar('T1')
,TypeVar('T2')
,TypeVar('T3')
는 각각Triple
클래스에서 첫 번째, 두 번째, 세 번째 요소의 타입을 나타냅니다.- 이들은 제너릭 타입 변수로,
Triple
객체가 생성될 때 각 요소에 대해 타입을 지정할 수 있습니다.
Triple
클래스:Generic[T1, T2, T3]
을 상속받아 제너릭을 사용합니다.- 생성자
__init__()
는 세 개의 요소first
,second
,third
를 받아서 해당 객체의 속성으로 저장합니다. get_first()
,get_second()
,get_third()
메서드를 통해 각 요소에 안전하게 접근할 수 있습니다.display()
메서드는 세 요소를 출력합니다.
실행 결과:
First: Python, Second: 3, Third: 3.14
First Element: Python
Second Element: 3
Third Element: 3.14
주요 포인트:
- 제너릭의 유연성:
Triple
클래스는 각 요소에 대해 제너릭 타입을 적용하여, 다양한 타입의 데이터를 저장하고 처리할 수 있습니다. 즉, 동일한 구조의 클래스를 여러 가지 데이터 타입에 대해 재사용할 수 있습니다. - 타입 안정성: 각 요소에 대해 명확한 타입을 지정함으로써, 잘못된 타입의 데이터를 사용하지 않도록 도와줍니다.
- 실제 사용 예: 이 구조는 세 개의 서로 다른 데이터를 하나의 구조로 묶고, 각 데이터를 안전하게 다룰 수 있는 상황에서 유용하게 사용할 수 있습니다. 예를 들어, 좌표값, 다양한 설정값, 또는 관련 있는 세 개의 데이터를 다룰 때 활용할 수 있습니다.
이 Triple
자료구조는 다양한 데이터 타입을 다룰 수 있는 강력한 도구가 될 수 있으며, 파이썬의 제너릭 기능을 잘 활용한 예입니다.
'실용적인 코드 샘플' 카테고리의 다른 글
[실용적인 코드 샘플] Singleton 패턴 (클래스 변수, 메타클래스 활용) (2) | 2024.10.19 |
---|---|
[실용적인 코드 샘플] 고정 크기 리스트 자료구조 (FixedSizeList) (0) | 2024.10.18 |
[실용적인 코드 샘플] 특정 키와 값의 타입을 제한하는 딕셔너리 (TypedDict) (2) | 2024.10.16 |
[실용적인 코드 샘플] 최대 크기를 가지는 딕셔너리 (`LimitedSizeDict`) (0) | 2024.10.16 |
[실용적인 코드 샘플] 읽기 전용 딕셔너리(ReadOnlyDict) (2) | 2024.10.16 |