파이썬 - 열거형: 초보자 가이드

안녕하세요, 미래의 파이썬 마법사 여러분! 오늘은 파이썬에서의 열거형(Enum) 세계로 흥미로운 여행을 떠날 거예요. 열거형(Enum)에 대해 들어본 적이 없다고 해도 걱정 마세요. 이 튜토리얼 끝에는 그들을 전문가처럼 사용할 수 있을 거예요!

Python - Enums

파이썬에서의 열거형은 무엇인가요?

게임을 만들고 있을 때, 플레이어가 다양한 난이도를 선택할 수 있다고 생각해봅시다. 이러한 난이도를 문자열이나 숫자로 표현할 수 있지만, 실수로 난이도를 잘못拼写到나술거나 잘못된 번호를 사용할 수도 있습니다. 이때 열거형(Enum)이 구조를 나타나요!

열거형은 "enumeration"의 약자로, 변하지 않는 이름이 붙은 값의 집합입니다. 코드에서 사용할 수 있는 사전 정의된 옵션의 특별한 목록과 비슷합니다. 우리의 첫 번째 예제를 살펴보겠습니다:

from enum import Enum

class DifficultyLevel(Enum):
EASY = 1
MEDIUM = 2
HARD = 3

이 코드에서는 enum 모듈에서 Enum 클래스를 임포트하고 있습니다. 그런 다음, 우리 자신의 Enum을 DifficultyLevel라는 이름으로 만듭니다. 이 Enum에는 세 개의 구성원이 있으며, 각각 EASY, MEDIUM, HARD와 값이 연관되어 있습니다.

왜 열거형을 사용하나요?

  1. 읽기 쉬움: 열거형은 코드의 가독성을 높입니다. 암호 같은 번호 대신 의미 있는 이름을 사용할 수 있습니다.
  2. 형 안전성: 열거형은 예기치 않은 값 사용을 방지하여 오류를 방지합니다.
  3. 구성: 관련 상수를 모아 두어 코드를 더 깔끔하게 만듭니다.

열거형에서 구성원 접근

이제 Enum을 생성했으니, 코드에서 어떻게 사용할 수 있는지 살펴보겠습니다.

print(DifficultyLevel.EASY)        # 출력: DifficultyLevel.EASY
print(DifficultyLevel.EASY.name)   # 출력: EASY
print(DifficultyLevel.EASY.value)  # 출력: 1

# 열거형 구성원 비교
print(DifficultyLevel.EASY == DifficultyLevel.MEDIUM)  # 출력: False
print(DifficultyLevel.HARD == DifficultyLevel.HARD)    # 출력: True

이를 분석해봅시다:

  • 점 표기법을 사용하여 열거형 구성원에 접근할 수 있습니다.
  • .name 속성은 열거형 구성원의 이름을 문자열로 반환합니다.
  • .value 속성은 연관된 값을 반환합니다.
  • ==를 사용하여 열거형 구성원을 비교할 수 있습니다.

재미있는 사실: 열거형 구성원은 싱글턴 객체입니다. 이는 DifficultyLevel.EASY를 참조하는 데 관계없이 항상 같은 메모리 객체를 의미합니다. 마치 늘 함께하는 최고의 친구처럼!

열거형 반복

열거형의 가장 멋진 부분 중 하나는 우리가 그들을 반복할 수 있습니다. 이는 Enum 내의 모든 옵션에 대해 작업을 수행하고 싶을 때 매우 유용합니다.

for level in DifficultyLevel:
print(f"난이도: {level.name}, 값: {level.value}")

# 출력:
# 난이도: EASY, 값: 1
# 난이도: MEDIUM, 값: 2
# 난이도: HARD, 값: 3

이 코드는 DifficultyLevel 열거형의 모든 구성원을 반복하며, 각 이름과 값을 인쇄합니다. 마치 마법의 투어 가이드가 모든 옵션을 보여주는 것 같아요!

고급 열거형 기능

기본 사항을 다루고 나면, 열거형의 더 많은 고급 기능을 살펴보겠습니다.

자동 번호 매기기

값을 수동으로 지정하지 않고자 한다면, 파이썬이 이를 대신 수행할 수 있습니다:

from enum import Enum, auto

class Direction(Enum):
NORTH = auto()
SOUTH = auto()
EAST = auto()
WEST = auto()

print(list(Direction))  # 출력: [<Direction.NORTH: 1>, <Direction.SOUTH: 2>, <Direction.EAST: 3>, <Direction.WEST: 4>]

auto() 함수는 1부터 시작하는 증가하는 정수 값을 자동으로 할당합니다.

함수에 열거형 사용

열거형은 함수 매개변수에 최적입니다. 그들은 함수를 더 강력하고 자기 문서화하는 데 도움이 됩니다:

def set_difficulty(level: DifficultyLevel):
print(f"게임 난이도 설정: {level.name}")

set_difficulty(DifficultyLevel.HARD)  # 출력: 게임 난이도 설정: HARD
set_difficulty("EASY")  # 이는 TypeError를 일으킬 것입니다

DifficultyLevellevel 매개변수에 형 힌트로 지정함으로써, 이 함수가 DifficultyLevel 열거형 구성원을 기대한다는 것을 파이썬(와 다른 개발자)에게 알려줍니다.

열거형 메서드와 속성

유용한 열거형 메서드와 속성의 표를以下에 제공합니다:

메서드/속성 설명 예제
Enum.name 열거형 구성원의 이름을 반환합니다 DifficultyLevel.EASY.name
Enum.value 열거형 구성원의 값을 반환합니다 DifficultyLevel.EASY.value
Enum.__members__ 모든 열거형 구성원의 딕셔너리 DifficultyLevel.__members__
Enum(value) 값으로 열거형 구성원을 가져옵니다 DifficultyLevel(1)

결론

축하합니다! 파이썬 스킬을 열거형을 마스터링하여 한 단계 업! 열거형은 코딩 도구킷에서 스위스 Army 톱니칼과 비슷합니다 - 간단해 보이지만, 매우 다재다능하며 코드를 더 깔끔하고 안전하고 가독성 있게 만들 수 있습니다.

다음 번 프로젝트에서 관련 상수 세트를 사용하고 있다면, 열거형을 사용해 보세요. 당신의 미래의 자신(와 당신의 코드를 작업하는 모든 다른 개발자)가 감사하게 될 것입니다!

코드를 계속 작성하고, 계속 배우며, 기억하십시오 - 프로그래밍 세계에서는 매일 열거형 스킬을 나열할 기회가 있습니다! (이해하셨죠? 열-력하게? 좋아요, 이제 나는 나自身를 빼고 갑니다. ?)

Credits: Image by storyset