파이썬의 열거형

파이썬의 열거형

이 기사에서는 파이썬에서의 열거형에 대해 설명합니다.

YouTube Video

파이썬의 열거형

파이썬의 enum은 상수를 정의하기 위한 특별한 클래스이며, 가독성을 높이고 코딩 오류 방지에 도움을 줍니다.

Enum이란 무엇인가요?

Enum(열거형의 약자)은 이름이 지정된 상수 집합을 정의하는 데 사용되는 클래스입니다. 주로 관련된 상수들을 함께 묶는 데 사용됩니다. 예를 들어, 색상, 요일 또는 방향을 나타내는 데 적합합니다.

Enum을 사용해야 하나요?

Enum을 사용하는 데에는 여러 가지 이유가 있습니다.

  • 가독성 향상: 이름이 지정된 상수를 사용하면 코드가 더 직관적이 됩니다.
  • 버그 방지: 상수 값의 변경이나 오용을 방지합니다.
  • 그룹화: 관련 상수들을 하나의 클래스로 정리하여 구조화된 데이터를 표현합니다.

Enum 기본 사용법

enum을 사용하려면 enum 모듈을 가져오고 클래스를 정의합니다. 클래스는 Enum을 상속받고 상수로 취급할 값을 정의해야 합니다.

Enum의 기본 예제

 1from enum import Enum
 2
 3class Color(Enum):
 4    RED = 1
 5    GREEN = 2
 6    BLUE = 3
 7
 8# Usage of Enum
 9print(Color.RED)        # Color.RED
10print(Color.RED.name)   # RED
11print(Color.RED.value)  # 1

이 예에서는 Color라는 이름의 Enum 클래스를 세 가지 값으로 정의합니다. 각 이름은 name 속성을 통해 접근할 수 있으며, 관련된 값은 value 속성을 통해 접근할 수 있습니다.

Enum 비교하기

Enum 멤버는 이름 또는 값으로 비교할 수 있습니다. is 연산자 또는 == 연산자를 사용하여 동일성과 동등성을 확인할 수 있습니다.

비교 예제

 1from enum import Enum
 2
 3class Direction(Enum):
 4    NORTH = 1
 5    SOUTH = 2
 6    EAST = 3
 7    WEST = 4
 8
 9# Equality comparison
10print(Direction.NORTH == Direction.SOUTH)  # False
11print(Direction.NORTH == Direction.NORTH)  # True
12
13# Identity comparison using is
14print(Direction.NORTH is Direction.SOUTH)  # False
15print(Direction.NORTH is Direction.NORTH)  # True

Enum을 비교할 때 ==is의 사용법이 여기에서 설명됩니다. Enum은 이름과 값이 같은 객체를 올바르게 비교하도록 설계되었습니다.

auto()를 사용한 값 자동 할당

Enum 멤버에 값을 자동으로 할당하려면 enum.auto()를 사용할 수 있습니다. auto()는 개발자가 값을 수동으로 지정할 필요 없이 Python이 자동으로 값을 할당하도록 해줍니다.

auto()의 예제

 1from enum import Enum, auto
 2
 3class Animal(Enum):
 4    DOG = auto()
 5    CAT = auto()
 6    MOUSE = auto()
 7
 8# Check the values of Enum
 9print(Animal.DOG.value)    # 1
10print(Animal.CAT.value)    # 2
11print(Animal.MOUSE.value)  # 3

이 예제에서는 auto()를 사용하여 값을 명시적으로 지정할 필요가 없어져 코드가 간결해집니다.

Enum 멤버에 여러 값을 할당하기

Enum 멤버는 튜플과 같은 여러 값을 가질 수도 있습니다. 이를 통해 각 멤버가 추가적인 관련 정보를 가질 수 있습니다.

튜플을 사용하는 예제

 1from enum import Enum
 2
 3class Status(Enum):
 4    ACTIVE = (1, 'Active user')
 5    INACTIVE = (2, 'Inactive user')
 6    SUSPENDED = (3, 'Suspended user')
 7
 8# Accessing Enum members
 9print(Status.ACTIVE.name)    # ACTIVE
10print(Status.ACTIVE.value)   # (1, 'Active user')
11print(Status.ACTIVE.value[1])  # Active user

이 예제에서 Status 클래스의 멤버는 각각 상태와 설명을 나타내는 두 개의 값을 가집니다. 이 방법은 Enum 멤버와 여러 정보를 연관시키고 싶을 때 유용합니다.

Enum을 플래그로 사용하기

Python의 enum에는 비트 플래그처럼 사용할 수 있는 Flag 클래스가 포함되어 있습니다. Flag를 사용하면 여러 상태를 조합하여 관리할 수 있습니다.

Flag의 예제

 1from enum import Flag, auto
 2
 3class Permission(Flag):
 4    READ = auto()
 5    WRITE = auto()
 6    EXECUTE = auto()
 7
 8# Combining flags
 9permission = Permission.READ | Permission.WRITE
10print(permission)                 # Permission.READ|WRITE
11print(Permission.EXECUTE in permission)  # False

이 예제에서는 비트 연산을 사용하여 여러 권한을 조합합니다. Flag를 사용하면 여러 상태를 간결하게 관리할 수 있습니다.

Enum을 사용할 때 유의할 점

Enum의 불변성

Enum 멤버는 불변입니다. 정의된 이후에는 이름이나 값을 변경할 수 없습니다. 이는 상수로서의 일관성을 유지하기 위한 중요한 특성입니다.

1from enum import Enum
2
3class Days(Enum):
4    MONDAY = 1
5    TUESDAY = 2
6
7# Example of immutability
8# Days.MONDAY = 3  # AttributeError: Cannot reassign members.

중복 멤버 금지

Enum 멤버는 고유한 이름과 값을 가져야 합니다. 중복된 값이 허용되더라도 Python은 자동으로 첫 번째 멤버를 우선시합니다.

요약

Python의 enum 모듈은 상수 집합을 그룹화하고 가독성을 높이며 코드 일관성을 유지하는 데 매우 유용한 도구입니다. auto()를 사용한 자동 값 할당부터 기본적인 사용법, 비트 플래그로의 활용에 이르기까지 다양한 활용이 가능합니다.

enum을 잘 이해하고 숙달하면 코드 품질을 향상시키고 오류를 방지하는 데 도움이 됩니다.

위의 기사를 보면서 Visual Studio Code를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.

YouTube Video