PYTHON · 기초 문법
match-case 패턴 매칭 (Python 3.10+)
구조적 패턴 매칭은 값, 타입, 구조를 한 번에 분해하고 매칭합니다. 단순 switch-case를 넘어 중첩 객체, 시퀀스, 매핑 등 복잡한 데이터 구조를 우아하게 처리할 수 있습니다.
기초 문법중급match-casepattern-matchingstructuralpython310
핵심 설명
구조적 패턴 매칭은 값, 타입, 구조를 한 번에 분해하고 매칭합니다. 단순 switch-case를 넘어 중첩 객체, 시퀀스, 매핑 등 복잡한 데이터 구조를 우아하게 처리할 수 있습니다.
Python code
from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
@dataclass
class Circle:
center: Point
radius: float
def describe_shape(shape):
match shape:
# 리터럴 매칭
case 0:
return "영(zero)"
# 클래스 패턴 + 가드
case Point(x=0, y=0):
return "원점"
case Point(x, y) if x == y:
return f"대각선 위의 점 ({x}, {y})"
case Point(x, y):
return f"점 ({x}, {y})"
# 중첩 패턴
case Circle(center=Point(0, 0), radius=r):
return f"원점 중심 원, 반지름={r}"
case Circle(center=c, radius=r) if r > 10:
return f"큰 원: 중심={c}, 반지름={r}"
# 시퀀스 패턴
case [x]:
return f"단일 원소: {x}"
case [x, y, *rest]:
return f"첫 둘: {x}, {y} (나머지 {len(rest)}개)"
# 매핑 패턴
case {"type": "user", "name": name, **extra}:
return f"사용자: {name}, 추가정보: {extra}"
# 와일드카드
case _:
return "알 수 없는 형태"
# 테스트
shapes = [
Point(0, 0), Point(3, 3), Point(1, 2),
Circle(Point(0, 0), 5), Circle(Point(1, 1), 15),
[42], [1, 2, 3, 4, 5],
{"type": "user", "name": "홍길동", "age": 30},
"기타",
]
for s in shapes:
print(f"{str(s):>45} → {describe_shape(s)}")학습 팁
case 절의 변수는 바인딩(캡처)됩니다. 상수와 비교하려면 점 표기법(Status.ACTIVE)을 사용하거나 가드(if)를 추가하세요.
주의할 점
case x:는 "변수 x에 바인딩"을 의미하지 "x와 비교"가 아닙니다. case 변수명:은 항상 매칭되므로 상수 비교에는 리터럴이나 case _ if val == x:를 사용하세요.
자주 묻는 질문
match-case 패턴 매칭 (Python 3.10+)란 무엇인가요?
구조적 패턴 매칭은 값, 타입, 구조를 한 번에 분해하고 매칭합니다. 단순 switch-case를 넘어 중첩 객체, 시퀀스, 매핑 등 복잡한 데이터 구조를 우아하게 처리할 수 있습니다.
match-case 패턴 매칭 (Python 3.10+) 학습 시 주의할 점은 무엇인가요?
case x: 는 "변수 x에 바인딩"을 의미하지 "x와 비교"가 아닙니다. case 변수명: 은 항상 매칭되므로 상수 비교에는 리터럴이나 case _ if val == x: 를 사용하세요.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.