파이썬의 열거형
이 기사에서는 파이썬에서의 열거형에 대해 설명합니다.
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를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.