PHpullh
학습 라이브러리/Python/패턴 매칭 심화

PYTHON · 함수형

패턴 매칭 심화

Python 3.10+의 구조적 패턴 매칭(match/case)의 고급 패턴을 다룹니다.

함수형고급matchcase패턴 매칭structural

핵심 설명

Python 3.10+의 구조적 패턴 매칭(match/case)의 고급 패턴을 다룹니다.

Python code

from dataclasses import dataclass

@dataclass
class Point:
    x: float
    y: float

@dataclass
class Circle:
    center: Point
    radius: float

@dataclass
class Rect:
    origin: Point
    w: float
    h: float

def describe(shape):
    match shape:
        case Circle(center=Point(0, 0), radius=r):
            return f"원점 중심 원 (반지름={r})"
        case Circle(radius=r) if r > 100:
            return f"거대한 원 (반지름={r})"
        case Circle(center=Point(x, y), radius=r):
            return f"원 at ({x},{y}) r={r}"
        case Rect(w=w, h=h) if w == h:
            return f"정사각형 ({w}x{h})"
        case Rect(origin=Point(x, y), w=w, h=h):
            return f"직사각형 at ({x},{y}) {w}x{h}"
        case _:
            return "알 수 없는 도형"

shapes = [
    Circle(Point(0, 0), 5),
    Circle(Point(3, 4), 150),
    Rect(Point(1, 1), 10, 10),
    Rect(Point(0, 0), 5, 3),
]
for s in shapes:
    print(f"  {describe(s)}")

학습 팁

패턴 매칭에서 가드 조건(if)을 사용하면 더 세밀한 조건 분기가 가능합니다.

주의할 점

패턴에서 변수명은 항상 새 바인딩을 생성합니다. 기존 변수와 비교하려면 case에 리터럴이나 가드를 사용하세요.

자주 묻는 질문

패턴 매칭 심화란 무엇인가요?

Python 3.10+의 구조적 패턴 매칭( match/case )의 고급 패턴을 다룹니다.

패턴 매칭 심화 학습 시 주의할 점은 무엇인가요?

패턴에서 변수명은 항상 새 바인딩을 생성합니다. 기존 변수와 비교하려면 case 에 리터럴이나 가드를 사용하세요.