Python에서 Enum을 표현하는 방법
Python에서 Enum을 표현하는 방법
- 명확성 향상: 숫자 상수 대신 의미 있는 이름을 사용하여 코드 가독성을 높일 수 있습니다.
- 보안 강화: 잘못된 값을 사용하는 것을 방지하여 코드 오류를 줄일 수 있습니다.
- 유지 관리 용이성 개선: 코드를 변경해야 할 때 값을 쉽게 변경하고 이름을 변경할 수 있습니다.
Python 3.4부터 기본적으로 enum
모듈이 제공되어 열거형을 간편하게 만들 수 있습니다. 다음은 기본적인 사용 방법입니다.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
color = Color.RED
print(color) # RED 출력
print(color.value) # 1 출력
위 코드에서 Color
는 Enum
을 상속하는 열거형 클래스입니다. RED
, GREEN
, BLUE
는 각각 1, 2, 3의 값을 가진 열거형 멤버입니다.
열거형 멤버는 다음과 같이 사용할 수 있습니다.
- 값으로 참조:
color = Color.RED
와 같이 값으로 직접 참조할 수 있습니다. - 속성으로 접근:
color.value
와 같이 속성을 통해 값에 접근할 수 있습니다.
열거형에는 다음과 같은 추가 기능도 제공됩니다.
- 자동 이름 지정:
auto()
데코레이터를 사용하여 멤버 값을 자동으로 할당할 수 있습니다. - 별칭: 동일한 값을 가진 멤버를 정의할 수 있습니다.
- 플래그: 멤버에 여러 값을 할당하여 비트 플래그를 구현할 수 있습니다.
Python Enum 예제 코드
예제 1: 기본 열거형
이 예제에서는 Color
라는 열거형을 정의하고 세 가지 색상 멤버 (RED
, GREEN
, BLUE
)를 추가합니다.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
# 열거형 멤버 사용
color = Color.RED
print(color) # RED 출력
print(color.value) # 1 출력
예제 2: 자동 이름 지정
from enum import Enum, auto
class Color(Enum):
RED = auto()
GREEN = auto()
BLUE = auto()
# 열거형 멤버 사용
color = Color.RED
print(color) # RED 출력
print(color.value) # 1 출력
예제 3: 별칭
이 예제에서는 동일한 값을 가진 멤버를 정의합니다.
from enum import Enum
class Color(Enum):
RED = 1
SCARLET = RED
# 열거형 멤버 사용
color = Color.RED
print(color) # RED 출력
print(color == Color.SCARLET) # True 출력
예제 4: 플래그
이 예제에서는 멤버에 여러 값을 할당하여 비트 플래그를 구현합니다.
from enum import Enum, Flag
class Permission(Enum):
READ = Flag(1)
WRITE = Flag(2)
EXECUTE = Flag(4)
# 열거형 멤버 사용
permissions = Permission.READ | Permission.WRITE
print(permissions.value) # 3 출력
print(permissions & Permission.WRITE) # Permission.WRITE 출력
Python에서 열거형을 대체하는 방법
튜플 사용:
가장 간단한 대체 방법은 튜플을 사용하는 것입니다. 튜플은 값들의 고정된 집합을 정의하는 데 사용할 수 있는 불변 데이터형입니다. 열거형과 유사하게 튜플에 의미 있는 이름을 할당하고 값으로 참조할 수 있습니다.
# 튜플 사용
Color = ("RED", "GREEN", "BLUE")
color = Color[0]
print(color) # RED 출력
장점:
- 간단하고 코드를 작성하기 쉽습니다.
- 별도의 라이브러리 필요 없음
단점:
enum
모듈만큼 명확하지 않음- 일부 기능 없음 (예: 자동 이름 지정, 별칭, 플래그)
클래스 사용:
좀 더 복잡한 대체 방법은 클래스를 사용하는 것입니다. 클래스를 사용하면 열거형에 대한 더 많은 제어와 기능을 제공할 수 있습니다. 예를 들어, 메서드를 정의하거나 다른 클래스와 상속 관계를 만들 수 있습니다.
# 클래스 사용
class Color:
RED = 1
GREEN = 2
BLUE = 3
color = Color.RED
print(color) # 1 출력
enum
모듈보다 더 많은 제어 및 기능 제공- 메서드 정의 및 상속 가능
- 튜플보다 복잡하고 코드 작성 어려움
별도의 라이브러리 사용:
Python에는 enum
모듈보다 더 많은 기능을 제공하는 여러 별도의 라이브러리가 있습니다. 예를 들어, enum-ext
라이브러리는 자동 이름 지정, 별칭, 플래그와 같은 추가 기능을 제공합니다.
# enum-ext 라이브러리 사용
from enum import Enum, EnumExt
class Color(Enum, EnumExt):
RED = auto()
GREEN = auto()
BLUE = auto()
# 열거형 멤버 사용
color = Color.RED
print(color) # RED 출력
print(color.value) # 1 출력
- 특정 요구 사항에 맞게 사용자 정의 가능
- 코드 복잡성 증가 가능성
결론
python python-3.x enums