제너릭을 이용한 파이썬의 `Pair` 클래스를 구현하는 것은 타입 안전성을 높이는 좋은 방법입니다. 제너릭은 다양한 데이터 타입을 다룰 수 있는 클래스를 작성할 수 있게 해줍니다. 다음은 `Pair` 클래스를 구현하고, 이 클래스를 사용하는 예제입니다.
1. Pair 클래스 구현
from typing import Generic, TypeVar
# 제너릭 타입 변수 정의
T = TypeVar('T')
U = TypeVar('U')
class Pair(Generic[T, U]):
def __init__(self, first: T, second: U):
self.first = first
self.second = second
def get_first(self) -> T:
"""첫 번째 요소를 반환합니다."""
return self.first
def get_second(self) -> U:
"""두 번째 요소를 반환합니다."""
return self.second
def __repr__(self) -> str:
"""객체의 문자열 표현을 정의합니다."""
return f"Pair({self.first}, {self.second})"
# 사용 예제
if __name__ == "__main__":
# 서로 다른 타입의 Pair 객체 생성
int_str_pair = Pair(1, "one")
float_bool_pair = Pair(3.14, True)
# 첫 번째 및 두 번째 요소 가져오기
print(int_str_pair.get_first()) # 출력: 1
print(int_str_pair.get_second()) # 출력: "one"
print(float_bool_pair.get_first()) # 출력: 3.14
print(float_bool_pair.get_second()) # 출력: True
# Pair 객체의 문자열 표현 출력
print(int_str_pair) # 출력: Pair(1, one)
print(float_bool_pair) # 출력: Pair(3.14, True)
2. 코드 설명
- 제너릭 타입 변수: TypeVar를 사용하여 제너릭 타입 변수를 정의합니다. T와 U는 각각 Pair 클래스의 첫 번째와 두 번째 요소의 타입을 나타냅니다.
- 클래스 정의: Pair 클래스는 두 개의 제너릭 타입 변수를 사용하여 두 개의 요소를 가집니다.
- 생성자: __init__ 메서드는 첫 번째와 두 번째 요소를 초기화합니다.
- 메서드:
- get_first: 첫 번째 요소를 반환합니다.
- get_second: 두 번째 요소를 반환합니다.
- 문자열 표현: __repr__ 메서드는 Pair 객체의 문자열 표현을 정의하여, 객체를 쉽게 확인할 수 있도록 합니다.
3. 실행 예제
위 코드를 실행하면 다음과 같은 결과가 출력됩니다:
1
one
3.14
True
Pair(1, one)
Pair(3.14, True)
4. 장점
- 타입 안전성: 제너릭을 사용하면 각 요소의 타입을 명확히 정의할 수 있어, 타입 안전성을 높입니다. 잘못된 타입을 사용하면 컴파일 타임에 오류를 발생시키므로, 런타임 오류를 줄일 수 있습니다.
- 재사용성: 다양한 데이터 타입에 대해 `Pair` 클래스를 재사용할 수 있습니다. 필요에 따라 다른 타입의 쌍을 생성할 수 있습니다.
이러한 방식으로 제너릭을 활용하면, 다양한 데이터 타입을 다룰 수 있는 유연한 클래스를 쉽게 구현할 수 있습니다.
'실용적인 코드 샘플' 카테고리의 다른 글
[실용적인 코드 샘플] 제너릭을 이용한 `Triple` 자료구조 1 (2) | 2024.10.16 |
---|---|
[실용적인 코드 샘플] 특정 키와 값의 타입을 제한하는 딕셔너리 (TypedDict) (2) | 2024.10.16 |
[실용적인 코드 샘플] 최대 크기를 가지는 딕셔너리 (`LimitedSizeDict`) (0) | 2024.10.16 |
[실용적인 코드 샘플] 읽기 전용 딕셔너리(ReadOnlyDict) (2) | 2024.10.16 |
[실용적인 코드 샘플] 고정 키 집합을 가지는 딕셔너리 (FixedKeysDict) (0) | 2024.10.15 |