1. Enum이란?

Enum 열거형(Enumerated Type)이라고 부릅니다. 해당 언어의 상수 역할을 하는 식별자, 일부 열거자 자료형은 언어에 기본으로 포함되어 있습니다. 대표적인 예가 Boolean 자료형으로 False, True 값이 미리 정의된 열거형으로 있습니다. False == 0, True == 1 이죠.

그리고 대부분의 언어는 사용자가 자신만의 Enum 직접 만들어 관리할 있도록 해줍니다.

 

2. 파이썬에도 Enum이 있을까?

파이썬은 2.x 버전에서는 Enum 없었습니다. Python 3.4에서 추가되었습니다. 해당 소스 코드는 Lib/enum.py 정의되어 있습니다.

 

3. 파이썬에서 Enum을 사용해보자!

우선 파이썬에서 Enum을 사용하기 위해서는 모듈(라이브러리)를 먼저 import 해야합니다.

from enum import Enum

그리고 Enum을 상속 받는 클래스를 만듭니다.

class Rainbow(Enum):
    Red = 0
    Orange = 1
    Yellow = 2
    Green = 3
    Blue = 4
    Navy = 5
    Purple = 6

자료형을 확인해보니 enum 형태의 'Rainbow'로 확인됩니다.

 

4. 직접 만든 Enum을 사용해보자!

호출하는 방법은 2가지가 있습니다.

얼핏 보면 Key : Value 형식으로 보이지만 딕셔너리가 작동하는 것과는 다릅니다.

딕셔너리에서는 Key를 호출하면 Value가 나왔지만 Enum은 HTML 태그의 작동 방식과 더 유사합니다.

 

이런식으로 name과 value를 호출하는 방식으로 사용합니다.

 

그렇다면 Enum을 이렇게 사용할 수도 있겠죠.

class Port(Enum):
    SSH = 22
    Telnet = 23
    SMTP = 25
    HTTP = 80
    HTTPS = 443

이런식으로 자동완성을 이용해 편리하게 사용할 수 있으며 연관된 집단끼리 클래스로 묶어 관리를 할 수 있습니다.

 

그러면 Enum은 왜 쓸까?

특정 상태를 하나의 집합으로 만들어 관리함으로써 코드를 정리하는데 수월합니다. , 가독성 높아지고 문서화 하는데 도움이 됩니다.

 

Enum에 대한 몇 가지 팁

다른 언어에서는 기본적으로 Enum을 상속 받도록 만든 다음, 내가 커스터마이징하려는 변수만 선언을 하면 값을 지정하지 않아도 기본값이 0, 1, 2, ... 이런식으로 설정이 되지만, 아쉽게도 파이썬은 모든 변수를 직접 지정해줘야합니다.

일일히 할당하기 귀찮은데 어쩌죠?

Enum 불러오지 않고 import enum 해서 전체를 불러올 경우 enum 안에 있는 auto() 함수를 이용할  있습니다. 그러면 자동으로 1, 2, 3, … 이런식으로 설정이 됩니다. 하지만 모든 변수에 = enum.auto() 직접 입력해줘야 하는 것은 동일하기 때문에 다른 언어와 비교해 자동 할당으로써의 의미는 떨어집니다.

import enum

class Rainbow(enum.Enum):
    Red = enum.auto()
    Orange = enum.auto()
    Yellow = enum.auto()
    Green = enum.auto()
    Blue = enum.auto()
    Navy = enum.auto()
    Purple = enum.auto()

 

이것도 귀찮은데요? 그리고 파이썬 최신 버전이 아닌 경우는 사용 못 하나요?

파이썬에서 Enum을 지원하기 이전에 사용하던 방법을 써도 됩니다.

Enum을 직접 함수로 만들어 사용하는 것입니다!

def myEnum(*sequential, **named):
    enums = dict(zip(sequential, range(len(sequential))), **named)
    return type('Enum', (), enums)

이렇게 myEnum이라는 함수를 만들어 사용할 수 있습니다.

Rainbow = myEnum('Red','Orange','Yellow','Green','Blue','Navy','Purple')

이렇게 하면 

자동으로 번호가 입력됩니다.

 

프로젝트를 하다보면 파이썬 최신 버전이 아닌 곳이 있을 수도 있습니다. 아직 파이썬 2.x 버전을 사용하는 곳도 있을 수 있으니 그런 곳에서는 이런식으로 함수를 만들어 사용하면 됩니다.

+ Recent posts