Enum
은 Enumeration type
의 abbreviation.
한정된 수의 가능한 값을 value로 가질 수 있는 데이터 타입 을 가르킴.
(보통 프로그래머가 가질 수 있는 값들의 집합을 정의해줌.)
프로그래밍에서 Enum
을 사용하면 코드의 가독성과 안정성이 향상됨.
요일, 월, status code 등과 같이 한정된 갯수의 고정된 상수들 중에서 value 가 선택 되는 variable 을 위해 Enum
이 사용됨.
Enum
을 사용하면 "다양한 값을 가지는 int, float나 str 을 사용하는 경우"보다 오류 가능성이 줄어들며,
프로그래머가 해당 타입의 variable이 가질 수 있는 값의 범위를 보다 명확하게 이해할 수 있도록 해줌.
PyQt 또는 PySide 등과 같은 GUI 라이브러리에서 정렬의 방식 등과 같이 지원되는 값이 한정된 경우, Enum
이 사용된다.
- 특히 QtCore 모듈의 Qt class 에서 애용됨.
다음은 요일을 나타내는 Enum
을 정의한 코드임.
from enum import Enum
class Day(Enum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7
# Enum 값을 사용하는 예
today = Day.MONDAY
print(today == Day.MONDAY) # True 출력
- 위의 코드는 python에서
Enum
을 사용한 예제임. - 실제로
Day
는Enum
을 상속한 클래스이며 요일에 해당하는 값들을 class attributes로 가짐. - 각 요일에 해당하는 class attribute는 1~7의 int 에 해당함.
- 하지만 코딩 상에서는 1~7의 int 값 대신, "요일"에 해당하는
MONDAY
등으로 표기하여 사용할 수 있게 해주기 때문에 프로그래머가 보다 쉽게 이해할 수 있도록 도와줌. - 동시에
Day
가 가질 수 있는 값들을 제한함으로서 잘못된 사용을 막아준다.
다음은 Functional API를 이용하는 경우임.
from enum import Enum
Day = Enum(value='Day',
names='Monday Tuesday Wendseday Thursday Friday Saturday Sunday',
start=1)
list(Day)
tomorrow = Day.Sunday
if tomorrow == 7:
print('case 00')
elif tomorrow == Day.Sunday:
print('case 01')
Python의 Enum은 relative op. 에서 동등연산자만을 지원할 뿐, 대소비교는 지원하지 않음.
이를 위해선 IntEnum 을 상속하면 됨.
https://docs.python.org/ko/3.9/library/enum.html
'Python' 카테고리의 다른 글
[DL] Define and Run vs. Define by Run (0) | 2024.03.28 |
---|---|
[DL] Tensor에서 maximum, minimum 찾기 (0) | 2024.03.28 |
[OOP] Example: MObject, Point, and Class (0) | 2024.03.23 |
[DL] PyTorch: Autograd (Basic) (1) | 2024.03.22 |
[DL] PyTorch: view, data, and detach (0) | 2024.03.22 |