파이썬에서 필드형 Enum 사용법

0

러스트에서의 enum은 정말 멋지죠? 특히 필드를 가질 수 있는 enum 덕분에 함수형 프로그래밍의 매력을 한껏 느낄 수 있습니다. 그런데, 이런 멋진 기능이 파이썬에도 있다면 어떨까요? 바로 여기, fieldenum이 그 답입니다!

파이썬에서 필드형 Enum이 왜 필요할까요?

기존의 파이썬 `Enum`과 `dataclass`는 각각의 한계를 가지고 있습니다. `Enum`은 필드를 가질 수 없고, `dataclass`는 선택지의 개념이 없습니다. 하지만 `fieldenum`은 이 두 가지의 장점을 결합하여 파이썬에서도 필드를 가진 enum을 사용할 수 있게 합니다.

설치 및 호환성

`fieldenum`의 설치는 아주 간단합니다. 다음 명령어를 사용하세요:

pip install fieldenum

이 패키지는 파이썬 3.10 이상에서 호환됩니다. 단, 하위 모듈인 `fieldenum.enums`는 파이썬 3.12 이상에서만 사용 가능합니다.

사용 방법

기본적인 사용 예시

`@fieldenum` 데코레이터를 사용하여 클래스에 `Variant` 혹은 `Unit`을 값으로 가지는 변수를 추가하면, 간단하게 `fieldenum`을 만들 수 있습니다. 예를 들어보겠습니다:

from fieldenum import Variant, Unit, fieldenum

@fieldenum
class Message:
    Quit = Unit
    Write = Variant(str)

이렇게 정의된 `Message` enum을 사용할 때는 각 배리언트를 인스턴스화하여 사용합니다.

message = Message.Quit
write_message = Message.Write("Hello, World!")

배리언트 정의하기

모든 `fieldenum`은 배리언트를 가질 수 있는데, 유닛 배리언트와 튜플형 배리언트를 지원합니다. 유닛 배리언트는 별도의 필드가 없으며, 튜플형 배리언트는 여러 필드를 가질 수 있습니다.

유닛 배리언트
from fieldenum import Unit, fieldenum

@fieldenum
class Action:
    Stop = Unit
    Start = Unit

action = Action.Stop
if action is Action.Stop:
    print("Action is Stop")
튜플형 배리언트
from fieldenum import Variant, fieldenum

@fieldenum
class Command:
    Move = Variant(int, int)
    Speak = Variant(str)

command = Command.Move(10, 20)
print(command)

이름 있는 배리언트

이름 있는 배리언트는 키워드 인자를 통해 필드를 초기화할 수 있습니다.

from fieldenum import Variant, fieldenum

@fieldenum
class Coordinate:
    Point2D = Variant(x=float, y=float)
    Point3D = Variant(x=float, y=float, z=float)

point = Coordinate.Point3D(x=1.0, y=2.0, z=3.0)
print(f"Point: {point.x}, {point.y}, {point.z}")

다양한 활용 예시

`fieldenum`은 Railroad Oriented Programming이나 Option과 같은 함수형 프로그래밍의 개념을 파이썬에서도 쉽게 사용할 수 있도록 도와줍니다.

Option 타입의 활용

Option 타입을 사용하여 값이 있거나 없는 상태를 나타낼 수 있습니다.

from fieldenum.enums import Option, Some

optional_value = Option.new(input("Type anything!") or None)
match optional_value:
    case Some(value):
        print(f"Value: {value}")
    case Option.Nothing:
        print("No value")

이 예제에서 `Option.new()` 메서드를 사용하면, 값이 있으면 `Option.Some`을, 값이 없으면 `Option.Nothing`을 반환합니다.

결론

파이썬에서 필드형 enum을 사용할 수 있는 `fieldenum`은 함수형 프로그래밍의 매력을 파이썬에서도 누릴 수 있게 해주는 강력한 도구입니다. 다양한 데이터 구조와 패턴을 구현할 수 있으며, 파이썬의 유연함과 러스트의 강력함을 모두 갖춘 이 도구를 꼭 사용해보세요!

참고 자료: GitHub, “fieldenum”

Leave a Reply