Case문이란?
파이썬의 match-case 문법은 Python 3.10 버전부터 새롭게 도입된 조건 분기 방법으로, 기존의 if-elif-else 구조를 더욱 간결하고 직관적으로 작성할 수 있도록 설계되었습니다. 이 문법은 특정 값(변수나 표현식 등)을 기반으로 여러 가지 경우(케이스) 중 어느 하나와 일치하는지를 판단한 후, 그에 알맞은 코드를 실행하는 방식으로 작동합니다.
기본 문법 구조
1.
match 키워드: 조건 분기의 기준이 되는 값(숫자, 문자열, 리스트 등)을 명시합니다. 이 값을 통해 이후의 case들이 어떤 패턴 혹은 값과 일치하는지 판단하게 됩니다.
2.
case 키워드: 실제로 일치 여부를 확인하는 부분입니다. 예를 들어, case 1: 은 기준값이 1과 같을 때 해당 블록이 실행된다는 것을 의미합니다. 만약 기준값이 여러 형태를 가질 수 있다면, case에서 다양한 패턴을 지정해줄 수도 있습니다.
3.
_ (언더스코어) 사용: 만약 위에 제시한 case들 중 어떤 것도 일치하지 않는다면, _ 기호를 통해 "기본값" 역할을 설정할 수 있습니다. 즉, case _:는 그 어떠한 조건에도 부합하지 않을 때 실행되는 '최종 선택지'라고 할 수 있습니다.
match subject:
case pattern1:
# 패턴1이 일치할 때 실행할 코드
case pattern2:
# 패턴2가 일치할 때 실행할 코드
case _:
# 어떤 패턴도 일치하지 않을 때 실행할 코드
Python
복사
match 문은 값을 여러 패턴과 비교해서 맞는 패턴을 찾으면 그에 해당하는 코드를 실행합니다. case _ 는 위의 모든 패턴이 맞지 않을 때 실행되는 기본 동작입니다.
패턴 매칭의 특징
•
숫자나 문자열 같은 일반적인 값을 비교할 때 사용
match value:
case 1:
print("숫자 1입니다")
case "hello":
print("안녕하세요")
case _:
print("기타 값입니다")
Python
복사
•
리스트나 튜플의 내용을 순서대로 확인하고 싶을 때 사용 (예: [1, 2, 3] 형태)
match points:
case [x, y]:
print(f"2차원 좌표: ({x}, {y})")
case [x, y, z]:
print(f"3차원 좌표: ({x}, {y}, {z})")
case _:
print("알 수 없는 좌표")
Python
복사
•
딕셔너리의 키와 값을 확인할 때 사용 (예: {"name": "Kim", "age": 25} 형태)
match person:
case {"name": str(name), "age": int(age)}:
print(f"{name}님은 {age}세입니다")
case _:
print("올바른 사용자 정보가 아닙니다")
Python
복사
•
여러 조건 중 하나라도 맞으면 실행하고 싶을 때 | 기호로 연결해서 사용
match status:
case "SUCCESS" | "OK":
print("작업이 성공했습니다")
case "ERROR" | "FAIL":
print("작업이 실패했습니다")
Python
복사
•
추가로 if문을 붙여서 더 자세한 조건을 설정하고 싶을 때 사용
match age:
case n if n < 20:
print("미성년자입니다")
case n if 20 <= n < 65:
print("성인입니다")
case _:
print("노인입니다")
Python
복사
if문과의 차이점
case문은 if-elif-else 구문으로도 구현할 수 있지만, 더 간결하고 가독성이 좋은 코드를 작성할 수 있습니다. 다음은 같은 기능을 하는 코드를 두 가지 방식으로 작성한 예시입니다
1. 단순 값 비교
# if문 사용
x = 2
if x == 1:
print("일")
elif x == 2:
print("이")
elif x == 3:
print("삼")
else:
print("다른 숫자")
# case문 사용
x = 2
match x:
case 1:
print("일")
case 2:
print("이")
case 3:
print("삼")
case _:
print("다른 숫자")
Python
복사
2. 복잡한 데이터 구조 처리
# if문 사용
x = [1, 2] # 리스트 데이터
if len(x) == 2:
a, b = x
print(f"2차원 좌표: ({a}, {b})")
elif len(x) == 3:
a, b, c = x
print(f"3차원 좌표: ({a}, {b}, {c})")
else:
print("알 수 없는 데이터")
# case문 사용
x = [1, 2] # 리스트 데이터
match x:
case [a, b]:
print(f"2차원 좌표: ({a}, {b})")
case [a, b, c]:
print(f"3차원 좌표: ({a}, {b}, {c})")
case _:
print("알 수 없는 데이터")
Python
복사
case문의 장점
•
더 간결하고 읽기 쉬운 코드 작성 가능- 여러 줄의 if-elif 구문을 간단한 match-case 구문으로 대체할 수 있어 코드의 길이가 줄어듭니다.- 들여쓰기가 단순해져서 코드의 구조를 한눈에 파악하기 쉽습니다.
•
복잡한 데이터 구조를 쉽게 분해하고 처리 가능- 리스트, 튜플, 딕셔너리 등의 데이터를 자동으로 분해하여 변수에 할당할 수 있습니다.- 중첩된 데이터 구조도 한 번의 패턴 매칭으로 처리할 수 있습니다.
•
패턴 매칭을 통한 데이터 유효성 검사가 더 직관적- 데이터의 구조와 타입을 패턴으로 명시하여 쉽게 검증할 수 있습니다.- 잘못된 데이터 형식을 바로 감지하고 처리할 수 있습니다.
•
여러 조건을 |로 묶어서 간단히 표현 가능- OR 조건을 | 기호 하나로 간단히 표현할 수 있습니다.- 여러 개의 if 문이나 elif 문을 하나의 case로 통합할 수 있어 코드가 깔끔해집니다.
if문의 장점
•
파이썬의 모든 버전에서 사용 가능case문은 Python 3.10 이상의 버전이 필요한 반면, if문은 파이썬의 모든 버전에서 사용할 수 있어 코드의 호환성이 더 높습니다.
•
더 복잡한 조건식을 자유롭게 사용 가능if문에서는 and, or, not 등의 논리 연산자와 함께 산술 연산, 함수 호출, 메서드 체이닝 등 다양한 표현식을 조건으로 사용할 수 있습니다. 반면 case문은 패턴 매칭에 초점이 맞춰져 있어 일부 복잡한 조건식을 표현하기 어려울 수 있습니다.
•
프로그래머에게 더 친숙한 문법if문은 대부분의 프로그래밍 언어에서 기본적으로 제공하는 제어문이므로, 프로그래머들이 직관적으로 이해하고 사용할 수 있습니다. 특히 파이썬을 처음 배우는 개발자나 다른 언어에서 넘어온 개발자들에게 더 익숙한 문법입니다.
위에서 학습한거 연습해야죠?
# 사용자 선택지 안내
print("모험을 시작합니다!")
print("1: 성으로 간다 🏰")
print("2: 숲으로 간다 🌲")
print("3: 산으로 간다 ⛰️")
# 사용자 입력 받기
선택 = input("어디로 갈까요? (숫자를 입력하세요): ")
# match-case를 사용한 조건 분기
match 선택:
case "1":
print("🏰 당신은 성으로 들어갔습니다. 보물이 있습니다!")
case "2":
print("🌲 당신은 숲으로 갔습니다. 늑대를 만났습니다!")
case "3":
print("⛰️ 당신은 산으로 갔습니다. 정상에서 멋진 풍경을 봅니다!")
case _:
print("❓ 선택지가 잘못되었습니다. 게임 종료.")
Python
복사
연습한거 스레드에 답글이나 피드에 남겨주시면 참 좋겠네요!!!
궁금하거나 모르는 부분이 있다면 스레드에 답글을 남겨주세요! 어떤 페이지의 어떤 내용이 궁금한지 구체적으로 알려주시면 더욱 좋습니다. 내용에 대한 응원 메시지도 환영해요!