본문 바로가기
Python

[Python] Enum (열거형, Enumeration Type)

by ds31x 2024. 3. 24.

EnumEnumeration 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을 사용한 예제임.
  • 실제로 DayEnum 을 상속한 클래스이며 요일에 해당하는 값들을 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

 

enum — 열거형 지원 — Python 3.9.18 문서

enum — 열거형 지원 소스 코드: Lib/enum.py 열거형(enumeration)은 고유한 상숫값에 연결된 기호 이름(멤버)의 집합입니다. 열거형 내에서, 멤버를 아이덴티티로 비교할 수 있고, 열거형 자체는 이터레

docs.python.org