Python 라이브러리 - enum

공식 문서

source code

enum

enum은 서로 관련이 있는 여러 개의 상수 집합을 정의할 때 사용하는 모듈입니다.
enum 모듈은 python3.4 버전 부터 사용할 수 있습니다.

만약 날짜를 입력하면 그 날의 요일에 해당하는 메뉴를 반환하는 get_menu() 함수를 아래처럼 만들었습니다.

from datetime import date 


def get_menu(input_date: date) -> str:
    weekday = input_date.isoweekday()       # 1: 월요일, 2: 화요일, ..., 7: 일요일
    if weekday == 1:
        menu = "김치찌개"
    elif weekday == 2:
        menu = "부대찌개"
    elif weekday == 3:
        menu = "순두부찌개"
    elif weekday == 4:
        menu = "스테이크"
    elif weekday == 5:
        menu = "치킨"
    elif weekday == 6:
        menu = "스프"
    elif weekday == 7:
        menu = "라면"
    return menu


print(get_menu(date(2023, 3, 2)))   # 스테이크

프로그래밍에서 상수로 선언하지 않은 숫자를 매직넘버라고 합니다.

위 프로그램에서도 1~7이라는 매직 넘버를 사용해 요일을 나타냈습니다. 이러한 매직넘버를 사용하면 코드의 가독성이 떨어집니다. 이 문제를 개선하기 위해서는 enum 라이브러리를 사용할 수 있습니다.

from datetime import date
from enum import IntEnum


class Week(IntEnum):
    MONDAY = 1
    TUESDAY = 2
    WEDNESDAY = 3
    THURSDAY = 4
    FRIDAY = 5
    SATURDAY = 6
    SUNDAY = 7


def get_menu(input_date: date) -> str:
    menu = {
        Week.MONDAY: "김치찌개",
        Week.TUESDAY: "라면",
        Week.WEDNESDAY: "부대찌개",
        Week.THURSDAY: "스프",
        Week.FRIDAY: "치킨",
        Week.SATURDAY: "스테이크",
        Week.SUNDAY: "삼겹살",
    }
    return menu[input_date.isoweekday()]


print(get_menu(date(2023, 3, 23)))  # 스프

Week 클래스는 enum.IntEnum 을 상송하여 만든 Enum 자료형 입니다. 이렇게 Enum 자료형을 만들어 상수로 사용하면 유지보수에 유리하고 가독성이 좋아집니다.

print(Week.MONDAY.name)  # MONDAY
print(Week.MONDAY.value)  # 1

이렇게 Enum 자료형은 name과 value 속성으로 접근할 수 있습니다.

for week in Week:
    print("{}:{}".format(week.name, week.value))
# MONDAY:1
# TUESDAY:2
# WEDNESDAY:3
# THURSDAY:4
# FRIDAY:5
# SATURDAY:6
# SUNDAY:7

for 문으로도 반복 할 수 있습니다.

 

 

'Python > Python' 카테고리의 다른 글

Python 라이브러리 - decimal  (0) 2023.05.16
Python 라이브러리 - math  (0) 2023.05.16
Python 라이브러리 - pprint  (0) 2023.05.16
Python 라이브러리 - heapq  (0) 2023.05.16
Python 라이브러리 - collections  (0) 2023.05.11