728x90
반응형
Enum은 Enumeration type의 abbreviation.

한정된 수의 가능한 값을 value로 가질 수 있는 데이터 타입 을 가르킴.
(보통 프로그래머가 가질 수 있는 값들의 집합을 정의해줌.)
프로그래밍에서 Enum을 사용하면 코드의 가독성과 안정성이 향상됨.
요일, 월, status code 등과 같이 한정된 갯수의 고정된 상수들 중에서 value 가 선택 되는 variable 을 위해 Enum이 사용됨.
Enum을 사용하면 "다양한 값을 가지는 int, float나 str 을 사용하는 경우"보다 오류 가능성이 줄어들며,
프로그래머가 해당 타입의 variable이 가질 수 있는 값의 범위를 보다 명확하게 이해할 수 있도록 해줌.
PyQt 또는 PySide 등과 같은 GUI 라이브러리에서 정렬의 방식 등과 같이 지원되는 값이 한정된 경우, Enum이 사용된다.
- 특히 QtCore 모듈의 Qt class 에서 애용됨.
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
다음은 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')
if tomorrow == Day.Sunday:
print('case 01')
Python의 Enum은 relational op. 에서 동등연산자(==)만을 지원할 뿐, 대소비교는 지원하지 않음.
이를 위해선 IntEnum 을 상속하면 됨.
같이보면 좋은 자료들
https://docs.python.org/ko/3.9/library/enum.html
enum — 열거형 지원 — Python 3.9.18 문서
enum — 열거형 지원 소스 코드: Lib/enum.py 열거형(enumeration)은 고유한 상숫값에 연결된 기호 이름(멤버)의 집합입니다. 열거형 내에서, 멤버를 아이덴티티로 비교할 수 있고, 열거형 자체는 이터레
docs.python.org
728x90
'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 |