파이썬 - Match-Case 문: 초보자 가이드

안녕하세요, 파이썬 프로그래머를 꿈꾸는 여러분! 오늘은 파이썬의 새로운 기능 중 하나인 match-case 문에 대해 깊이 들어보겠습니다. 이를 코드에서 다양한 시나리오를 처리하는 스위스 Army 톱니칼이라고 생각하면 됩니다. 이 흥미로운 여정을 함께 떠나보겠습니다!

Python - Match-Case Statement

Match-Case 문이란?

파이썬 3.10에서 도입된 match-case 문은 if-elif-else 구조의 슈퍼헴이版입니다. 우리는 이를 통해 하나의 값에 대해 여러 패턴과 비교하여 첫 번째에 일치하는 패턴에 따라 코드를 실행할 수 있습니다.

기본 문법

match subject:
case pattern1:
# pattern1에 대한 코드
case pattern2:
# pattern2에 대한 코드
case _:
# 기본 케이스

이를 재미있는 예제와 함께 설명해보겠습니다:

def greet_superhero(hero):
match hero:
case "Spider-Man":
print("위대한 힘은 위대한 책임을 가져옵니다!")
case "Iron Man":
print("저는 아이언 맨입니다.")
case "Black Widow":
print("저는 항상 여러분 아들들 뒤를 챙기고 있습니다.")
case _:
print("저는 그 슈퍼헴을 몰라도 그들은 아마도 멋질 겁니다!")

greet_superhero("Spider-Man")
greet_superhero("원더 우먼")

이 예제에서는 hero 변수를 다양한 슈퍼헴 이름과 일치시켜 보고 있습니다. _ 케이스는 기본 케이스로, 인식되지 않은 헴을 잡습니다.

Match 문에서의 결합된 케이스

때로는 여러 패턴을 같은 코드로 처리하고 싶습니다. 파이썬은 이를 지원합니다!

def classify_number(num):
match num:
case 0:
print("0은 독특한 숫자입니다!")
case 1 | 2 | 3:
print("이것은 작은 양수입니다.")
case -1 | -2 | -3:
print("이것은 작은 음수입니다.")
case _:
print("이것은 더 큰 숫자입니다.")

classify_number(2)
classify_number(-2)
classify_number(100)

여기서는 | 연산자를 사용하여 케이스를 결합하고 있습니다. 일반英语에서 "또는"라고 하는 것과 같습니다.

Match-Case 문에서 리스트를 인수로 사용

match-case 문은 단순한 값뿐만 아니라 복잡한 구조를 가진 리스트도 처리할 수 있습니다!

def analyze_coordinates(point):
match point:
case [0, 0]:
print("원점")
case [0, y]:
print(f"y축에서 y = {y}")
case [x, 0]:
print(f"x축에서 x = {x}")
case [x, y]:
print(f"({x}, {y}) 지점")
case _:
print("유효하지 않은 2D 지점")

analyze_coordinates([0, 0])
analyze_coordinates([5, 0])
analyze_coordinates([3, 4])
analyze_coordinates([1, 2, 3])

이 예제는 우리가 어떻게 리스트 패턴과 일치시킬 수 있는지 보여줍니다. 이 코드는 리스트 내부를 볼 수 있는 X-ray 시력을 가진 것과 같습니다!

"Case" 절에서 "if" 사용

코드를 더 정밀하게 매칭하고 싶을 때, if를 사용하여 가드 조건을 추가할 수 있습니다:

def categorize_age(age):
match age:
case n if n < 0:
print("시간 여행자 경고! 음수 나이 감지됨.")
case n if n < 13:
print("어린이입니다. 젊은 시절을 즐겨보세요!")
case n if n < 20:
print("ティーンエイジ에 오신 것을 환영합니다!")
case n if n < 65:
print("어른의 삶, 여기서 시작합니다!")
case _:
print("지혜는 나이와 함께 오는 것이죠. 여러분은 그것을 가득 가지고 있습니다!")

categorize_age(8)
categorize_age(15)
categorize_age(30)
categorize_age(70)

여기서는 if 조건을 사용하여 케이스를 더욱 세분화하고 있습니다. 이는 match 문에 마agnifying glass를 걸어 두는 것과 같습니다!

실용적 응용

이제 기본 사항을 다루었으니, match-case 문의 다양한 측면을 결합한 더 복잡한 예제를 살펴보겠습니다:

def process_command(command):
match command.split():
case ["quit"]:
print("프로그램을 종료합니다. 안녕히 가세요!")
return False
case ["hello" | "hi" | "hey", name]:
print(f"안녕하세요, {name}! 만나서 반갑습니다.")
case ["add", *numbers] if all(n.isdigit() for n in numbers):
result = sum(int(n) for n in numbers)
print(f"합은: {result}")
case ["multiply", *numbers] if all(n.isdigit() for n in numbers):
result = 1
for n in numbers:
result *= int(n)
print(f"곱은: {result}")
case _:
print("저는 그 명령을 이해하지 못했습니다.")
return True

while True:
user_input = input("명령어를 입력하세요: ")
if not process_command(user_input):
break

이 예제는 다양한 유형의 입력을 처리할 수 있는 명령 프로세서를 보여줍니다:

  • 프로그램을 종료할 수 있습니다
  • 사용자를 인사할 수 있습니다
  • 숫자를 더하거나 곱할 수 있습니다
  • 알 수 없는 명령을 우아하게 처리합니다

match-case 문은 이러한 시나리오에서 빛을 발하며, 여러 가지 입력을 명확하고 간결하게 처리할 수 있습니다.

결론

match-case 문은 파이썬 도구킷에 강력한 도구입니다. 여러 조건을 처리할 때 더 가독성 있고 유지보수하기 쉬운 코드를 작성할 수 있습니다. 기억해주세요, 어떤 도구든 올바른 상황에서 사용하는 것이 중요합니다. 강제하지 말고 간단한 if-else로 충분히 할 수 있는 경우는 그냥 두고, 복잡한 패턴 일치 시나리오를 처리할 때는 그를 받아들이세요.

파이썬 여정을 계속하면서, match-case 문이 코드를 더 간단하고 표현력 있게 만들 수 있는 상황을 더 많이 발견하게 될 것입니다. 코딩을 즐기세요, 여러분의 매치가 항상 완벽한 케이스를 찾을 수 있기를!

빠른 참조 표

기능 예제
기본 Match-Case match value: case pattern: ...
기본 케이스 case _: ...
결합된 케이스 case pattern1 | pattern2: ...
리스트 매칭 case [x, y]: ...
가드 조건 case pattern if condition: ...

기억하세요, 연습이 체인점입니다. 그래서 앞으로, 이러한 패턴들을 실험해보세요, 파이썬 기술이 날아오를 것입니다!

Credits: Image by storyset