Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 열거형(Enum) 완벽 가이드: 기본 개념부터 실전 활용까지

Enum(열거형)은 파이썬에서 고유하고 변하지 않는 상수 값에 기호 이름(멤버)을 연결한 집합을 만들기 위한 클래스입니다. 열거형의 멤버들은 기호 이름을 기준으로 서로 비교할 수 있으며, 열거형 자체도 반복(iteration)하여 사용할 수 있습니다.

열거형(Enum)의 주요 특징

  • 객체를 평가 가능한 문자열 형태로 표현하는 repr() 표현을 지원합니다.

  • name 속성을 사용해 열거형 멤버의 이름을 확인할 수 있습니다.

  • type() 함수를 통해 열거형 멤버의 타입을 검사할 수 있습니다.

기본 예제

import enum
# enum 클래스를 사용해 열거형 생성
class Days(enum.Enum):
    Sun = 1
    Mon = 2
    Tue = 3

# 열거형 멤버를 문자열로 출력
print("The enum member as a string is : ", end="")
print(Days.Mon)

# 열거형 멤버를 repr로 출력
print("The enum member as a repr is : ", end="")
print(repr(Days.Sun))

# 열거형 멤버의 타입 확인
print("The type of enum member is : ", end="")
print(type(Days.Mon))

# 열거형 멤버의 이름 출력
print("The name of enum member is : ", end="")
print(Days.Tue.name)

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

The enum member as a string is : Days.Mon
The enum member as a repr is : <Days.Sun: 1>
The type of enum member is : <enum 'Days'>
The name of enum member is : Tue

반복 가능한 객체로 열거형 출력하기

열거형은 반복 가능한(iterable) 객체이므로 리스트처럼 순회하며 모든 멤버를 출력할 수 있습니다. 아래 코드에서는 for 루프를 사용해 열거형의 모든 멤버를 출력합니다.

예제

import enum
# enum 클래스를 사용해 열거형 생성
class Days(enum.Enum):
    Sun = 1
    Mon = 2
    Tue = 3

# for 루프로 모든 열거형 멤버 출력
print("The enum members are : ")
for weekday in (Days):
    print(weekday)

실행 결과

The enum members are :
Days.Sun
Days.Mon
Days.Tue

열거형 해싱(Hashing)

열거형의 멤버는 해시 가능(hashable)하므로 딕셔너리나 집합(set)의 키로 활용할 수 있습니다. 아래 예제에서는 해싱을 실제로 적용하고, 해싱이 성공적으로 수행되었는지 확인합니다.

예제

import enum
# enum 클래스를 사용해 열거형 생성
class Days(enum.Enum):
    Sun = 1
    Mon = 2

# 해싱을 활용해 딕셔너리 생성
Daytype = {}
Daytype[Days.Sun] = 'Sun God'
Daytype[Days.Mon] = 'Moon God'

# 해싱이 성공했는지 확인
print(Daytype == {Days.Sun: 'Sun God', Days.Mon: 'Moon God'})

실행 결과

True

열거형 멤버에 접근하기

열거형 멤버는 이름(name) 또는 값(value)을 사용해 접근할 수 있습니다. 아래 예제에서는 먼저 이름을 인덱스처럼 사용해 값에 접근하고, 이후 값을 이용해 멤버에 접근합니다.

예제

import enum
# enum 클래스를 사용해 열거형 생성
class Days(enum.Enum):
    Sun = 1
    Mon = 2

# 이름으로 접근
print('enum member accessed by name: ')
print(Days['Mon'])

# 값으로 접근
print('enum member accessed by value: ')
print(Days(1))

실행 결과

enum member accessed by name:
Days.Mon
enum member accessed by value:
Days.Sun

열거형 비교하기

열거형 멤버 간의 비교는 비교 연산자를 사용하면 되는 매우 간단한 작업입니다. 동등 비교(==)와 불일치 비교(!=)를 모두 사용할 수 있습니다.

예제

import enum
# enum 클래스를 사용해 열거형 생성
class Days(enum.Enum):
    Sun = 1
    Mon = 2
    Tue = 1

if Days.Sun == Days.Tue:
    print('Match')
if Days.Mon != Days.Tue:
    print('No Match')

실행 결과

Match
No Match