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