Enum(열거형)은 파이썬에서 고유하고 변하지 않는 상수 값에 기호 이름(멤버)을 연결한 집합을 만들기 위한 클래스입니다. 열거형의 멤버들은 기호 이름을 기준으로 서로 비교할 수 있으며, 열거형 자체도 반복(iteration)하여 사용할 수 있습니다.
열거형(Enum)의 주요 특징
객체를 평가 가능한 문자열 형태로 표현하는
repr()표현을 지원합니다.name속성을 사용해 열거형 멤버의 이름을 확인할 수 있습니다.type()함수를 통해 열거형 멤버의 타입을 검사할 수 있습니다.
기본 예제
import enum
# enum 클래스를 사용해 열거형 생성
class Days(enum.Enum):
Sun = 1
Mon = 2
Tue = 3
# 열거형 멤버를 문자열로 출력
print("The enum member as a string is : ", end="")
print(Days.Mon)
# 열거형 멤버를 repr로 출력
print("The enum member as a repr is : ", end="")
print(repr(Days.Sun))
# 열거형 멤버의 타입 확인
print("The type of enum member is : ", end="")
print(type(Days.Mon))
# 열거형 멤버의 이름 출력
print("The name of enum member is : ", end="")
print(Days.Tue.name)
실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
The enum member as a string is : Days.Mon
The enum member as a repr is : <Days.Sun: 1>
The type of enum member is : <enum 'Days'>
The name of enum member is : Tue
반복 가능한 객체로 열거형 출력하기
열거형은 반복 가능한(iterable) 객체이므로 리스트처럼 순회하며 모든 멤버를 출력할 수 있습니다. 아래 코드에서는 for 루프를 사용해 열거형의 모든 멤버를 출력합니다.
예제
import enum
# enum 클래스를 사용해 열거형 생성
class Days(enum.Enum):
Sun = 1
Mon = 2
Tue = 3
# for 루프로 모든 열거형 멤버 출력
print("The enum members are : ")
for weekday in (Days):
print(weekday)
실행 결과
The enum members are :
Days.Sun
Days.Mon
Days.Tue
열거형 해싱(Hashing)
열거형의 멤버는 해시 가능(hashable)하므로 딕셔너리나 집합(set)의 키로 활용할 수 있습니다. 아래 예제에서는 해싱을 실제로 적용하고, 해싱이 성공적으로 수행되었는지 확인합니다.
예제
import enum
# enum 클래스를 사용해 열거형 생성
class Days(enum.Enum):
Sun = 1
Mon = 2
# 해싱을 활용해 딕셔너리 생성
Daytype = {}
Daytype[Days.Sun] = 'Sun God'
Daytype[Days.Mon] = 'Moon God'
# 해싱이 성공했는지 확인
print(Daytype == {Days.Sun: 'Sun God', Days.Mon: 'Moon God'})
실행 결과
True
열거형 멤버에 접근하기
열거형 멤버는 이름(name) 또는 값(value)을 사용해 접근할 수 있습니다. 아래 예제에서는 먼저 이름을 인덱스처럼 사용해 값에 접근하고, 이후 값을 이용해 멤버에 접근합니다.
예제
import enum
# enum 클래스를 사용해 열거형 생성
class Days(enum.Enum):
Sun = 1
Mon = 2
# 이름으로 접근
print('enum member accessed by name: ')
print(Days['Mon'])
# 값으로 접근
print('enum member accessed by value: ')
print(Days(1))
실행 결과
enum member accessed by name:
Days.Mon
enum member accessed by value:
Days.Sun
열거형 비교하기
열거형 멤버 간의 비교는 비교 연산자를 사용하면 되는 매우 간단한 작업입니다. 동등 비교(==)와 불일치 비교(!=)를 모두 사용할 수 있습니다.
예제
import enum
# enum 클래스를 사용해 열거형 생성
class Days(enum.Enum):
Sun = 1
Mon = 2
Tue = 1
if Days.Sun == Days.Tue:
print('Match')
if Days.Mon != Days.Tue:
print('No Match')
실행 결과
Match
No Match