코딩이 즐겁다

[파이썬 기초] switch문을 대체하는 match문 사용법 갓벽 가이드 본문

Python

[파이썬 기초] switch문을 대체하는 match문 사용법 갓벽 가이드

코즐 2025. 2. 22. 14:18
반응형

 

  • switch-case를 대체하는 Python 3.10+의 새로운 문법
  • match 문을 사용해 다양한 패턴 매칭 (숫자, 문자열, 튜플, 리스트, 객체 등) 가능
  • if 조건 추가 가능 → 더 강력한 조건 분기 처리 가능
  • Python 3.10 이상에서만 사용 가능

 


 

파이썬 match-case문

Python 3.10부터 switch-case 문을 대체하는 match-case문이 도입되었습니다. 이 문법은 패턴 매칭을 기반으로 하며, switch-case보다 더 강력하고 유연한 방식으로 여러 가지 조건을 처리할 수 있습니다.

 


 

기본 문법

match 변수:
    case 값1:
        실행 코드
    case 값2:
        실행 코드
    case _:
        실행 코드  # 기본값 (default 역할)
  • match 뒤에 비교할 변수를 넣습니다.
  • 각 case 문에서 특정 값과 매칭됩니다.
  • case _: 는 기본값 역할 (switch-case의 default와 동일).

 


 

기본 예제

✅ 예제 코드:

def get_day_name(day):
    match day:
        case 1:
            return "월요일"
        case 2:
            return "화요일"
        case 3:
            return "수요일"
        case 4:
            return "목요일"
        case 5:
            return "금요일"
        case 6:
            return "토요일"
        case 7:
            return "일요일"
        case _:
            return "잘못된 입력"

print(get_day_name(3))  # 출력: 수요일
print(get_day_name(9))  # 출력: 잘못된 입력

switch-case 문과 매우 유사하지만, match-case 문법이 더 간결하고 Pythonic함

 


 

여러 값 매칭 ( | 연산자 사용 )

✅ 예제 코드:

def check_vowel(letter):
    match letter:
        case 'a' | 'e' | 'i' | 'o' | 'u':
            return "모음입니다."
        case _:
            return "자음입니다."

print(check_vowel('a'))  # 출력: 모음입니다.
print(check_vowel('b'))  # 출력: 자음입니다.

| 연산자를 사용하여 여러 값을 한 번에 매칭할 수 있음.

 


 

튜플 매칭 (구조 분해)

✅ 예제 코드:

def process_point(point):
    match point:
        case (0, 0):
            return "원점입니다."
        case (x, 0):
            return f"x축 위의 점 ({x}, 0)"
        case (0, y):
            return f"y축 위의 점 (0, {y})"
        case (x, y):
            return f"일반적인 점 ({x}, {y})"
        case _:
            return "잘못된 입력"

print(process_point((0, 0)))  # 출력: 원점입니다.
print(process_point((5, 0)))  # 출력: x축 위의 점 (5, 0)
print(process_point((0, 7)))  # 출력: y축 위의 점 (0, 7)
print(process_point((3, 4)))  # 출력: 일반적인 점 (3, 4)

튜플을 패턴 매칭하여 x, y 값을 추출할 수 있음.

 


 

리스트 매칭

✅ 예제 코드:

def check_list(lst):
    match lst:
        case [1, 2, 3]:
            return "리스트가 [1, 2, 3]과 일치합니다."
        case [1, *rest]:  # 첫 번째 값이 1이고 나머지는 상관없음
            return f"리스트는 1로 시작하며, 나머지는 {rest} 입니다."
        case _:
            return "일치하는 패턴이 없습니다."

print(check_list([1, 2, 3]))  # 출력: 리스트가 [1, 2, 3]과 일치합니다.
print(check_list([1, 5, 6]))  # 출력: 리스트는 1로 시작하며, 나머지는 [5, 6] 입니다.
print(check_list([2, 3, 4]))  # 출력: 일치하는 패턴이 없습니다.

리스트 패턴 매칭 및 구조 분해(*rest 사용) 가능.

 


 

클래스 객체 매칭

✅ 예제 코드:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

def check_person(person):
    match person:
        case Person(name="Alice", age=30):
            return "Alice는 30살입니다."
        case Person(name=name, age=age):
            return f"{name}님의 나이는 {age}살입니다."
        case _:
            return "알 수 없는 사람입니다."

p1 = Person("Alice", 30)
p2 = Person("Bob", 25)

print(check_person(p1))  # 출력: Alice는 30살입니다.
print(check_person(p2))  # 출력: Bob님의 나이는 25살입니다.

클래스 객체의 속성을 패턴 매칭하여 특정 값을 추출할 수 있음.

 


 

if 조건 추가

✅ 예제 코드:

def check_number(n):
    match n:
        case n if n > 0:
            return "양수입니다."
        case n if n < 0:
            return "음수입니다."
        case 0:
            return "0입니다."
        case _:
            return "잘못된 입력"

print(check_number(10))  # 출력: 양수입니다.
print(check_number(-5))  # 출력: 음수입니다.
print(check_number(0))   # 출력: 0입니다.

패턴 매칭과 if 문을 함께 사용하여 세밀한 조건 설정 가능.

 


match-case문 vs if-elif-else문 비교

방법 장점 단점
if-elif-else 익숙하고 직관적 가독성이 떨어질 수 있음
match-case 가독성이 좋고 패턴 매칭 가능 Python 3.10 이상에서만 사용 가능

 

if-elif-else문 사용하여 switch문 구현

✅ 예제 코드:

def get_day_name(day):
    if day == 1:
        return "월요일"
    elif day == 2:
        return "화요일"
    elif day == 3:
        return "수요일"
    elif day == 4:
        return "목요일"
    elif day == 5:
        return "금요일"
    elif day == 6:
        return "토요일"
    elif day == 7:
        return "일요일"
    else:
        return "잘못된 입력"

print(get_day_name(3))  # 출력: 수요일

if-elif-else 문은 직관적이지만, 조건이 많아질수록 가독성이 떨어질 수 있습니다.

 


주의 사항

  • Python 3.10 이상에서만 사용 가능 → match-case 문을 사용하려면 Python 3.10 이상이 필요함.
  • case 문에서 변수를 선언할 경우, _ (언더스코어)를 사용하여 기본값을 처리하는 것이 좋음.
  • | 연산자를 사용하면 여러 값을 동시에 매칭할 수 있음.

 


 

코즐

파이썬을 배우고 싶은 사람은 누구나 파이썬 학원(국비 지원 파이썬 학원)에 가지 않고도 파이썬 공부를 하면서 실력을 쌓아나갈 수 있다고 생각합니다. 

파이썬 온라인 강의 자료를 올리면서 누구나 쉽게 파이썬을 공부하실 수 있도록 최선을 다해서 설명하도록 하겠습니다.

 


 

 

반응형