1. 기본적인 Enum 사용법
Enum을 사용하면 관련된 상수들을 그룹화할 수 있습니다.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED) # Color.RED
print(Color.RED.value) # 1
print(Color.RED.name) # 'RED'
2. 자동 값 할당 (auto)
값을 직접 지정하지 않고 자동으로 할당할 수 있습니다.
from enum import Enum, auto
class Status(Enum):
# auto()는 자동으로 1부터 시작하는 정수 값을 할당합니다.
PENDING = auto()
IN_PROGRESS = auto()
COMPLETED = auto()
print(Status.PENDING.value) # 1
print(Status.IN_PROGRESS.value) # 2
print(Status.COMPLETED.value) # 3
3. 열거형 순회
Enum은 이터러블(iterable)이라서 루프를 돌면서 접근할 수 있습니다.
for color in Color:
print(color.name, color.value)
# 출력
RED 1
GREEN 2
BLUE 3
4. 문자열 매핑 (Enum을 딕셔너리처럼 활용)
열거형을 사용하면 문자열을 특정 값으로 쉽게 변환할 수 있습니다.
class Role(Enum):
ADMIN = "admin"
USER = "user"
GUEST = "guest"
role = Role["ADMIN"] # 문자열 키로 접근
print(role.value) # "admin"
5. 열거형 비교
Enum 값은 동일성(is)과 동등성(==) 비교가 가능합니다.
if role == Role.ADMIN:
print("관리자입니다.") # 출력됨
6. 딕셔너리 키로 사용
Enum 값은 해시 가능하므로 딕셔너리의 키로 사용할 수 있습니다.
permissions = {
Role.ADMIN: "모든 권한",
Role.USER: "일반 권한",
Role.GUEST: "읽기 전용"
}
print(permissions[Role.ADMIN]) # "모든 권한"
7. Mixin을 활용한 커스텀 기능 추가
메서드를 포함하여 더 복잡한 Enum을 만들 수도 있습니다.
class ExtendedEnum(Enum):
@classmethod
def list(cls):
return [item.name for item in cls]
class Animal(ExtendedEnum):
DOG = 1
CAT = 2
BIRD = 3
print(Animal.list()) # ['DOG', 'CAT', 'BIRD']
8. IntEnum을 활용한 숫자 Enum
IntEnum을 사용하면 숫자 기반 Enum을 다른 정수와 함께 사용할 수 있습니다.
from enum import IntEnum
class Priority(IntEnum):
LOW = 1
MEDIUM = 2
HIGH = 3
print(Priority.LOW < Priority.HIGH) # True
print(Priority.LOW + 1) # 2
9. 플래그(Flag) Enum을 활용한 비트 연산
비트 플래그를 활용할 때 Flag 또는 IntFlag를 사용할 수 있습니다.
비트 연산을 활용하면 권한 시스템을 만들 때 유용합니다.
from enum import Flag, auto
class Permission(Flag):
READ = auto()
WRITE = auto()
EXECUTE = auto()
perm = Permission.READ | Permission.WRITE
print(perm) # Permission.READ|WRITE
# 특정 권한 포함 여부 확인
print(Permission.READ in perm) # True
print(Permission.EXECUTE in perm) # False