https://www.ciokorea.com/news/185423
Serdar Yegulalp | InfoWorld
파이썬(Python)은 강력하고 인기가 높지만, 다른 언어에는 있는 플로우 제어(flow control)가 결여되어 있었다. 이는 하나의 값을 가져와, 여러 가능한 조건 중 하나에 대해 명쾌하게 매칭 할 수 있는 방법이다. C와 C++는 switch/case 구성이, 러스트(Rust)에서는 ‘패턴 매칭’이 여기에 해당한다.
파이썬에서 이를 처리하는 전통적인 방법은 그리 명확하지 않다. 첫 번째는 if/elif/else 연쇄 표현식을 쓰는 방법이다. 또 다른 방법은 매칭할 값을 사전에 키로 저장하고, 이 값들을 사용하는 것이다. 예를 들어, 함수를 값으로 저장하고, 키나 다른 변수를 입력으로 사용한다. 잘 작동하는 경우가 많지만, 구성과 유지관리가 번거로울 수 있다.
파이썬에 switch/case 같은 구문을 추가하려는 많은 계획들이 실패한 후, 파이썬 언어를 만든 ‘구이도 반 로섬’과 여러 사람들이 제안한 파이썬 ‘3.10: 구조적 패턴 매칭(Structural Pattern Matching)’에 대한 제안이 최근 수락됐다. 구조적 패턴 매칭은 단순한 switch/case 형태의 매칭은 물론 더 광범위한 유지 케이스를 지원한다.
Image Credit : Getty Images Bank
파이썬 구조적 패턴 매칭 구조적 패턴 매칭은 파이썬에 match/case 명령문과 패턴 구문을 도입한다. match/case 명령문에는 switch/case와 동일한 원칙이 적용된다. 객체를 가져와, 이 객체를 하나 이상의 매칭 패턴에 대해 테스트하고, 매칭되면 조치를 취한다.
각 case 명령문 다음에는 매칭할 패턴이 위치한다. 위 예제는 간단한 문자열을 매칭 대상으로 사용하고 있지만, 더 복잡한 매칭도 가능하다.
파이썬은 맨위부터 맨아래까지 case 목록을 조사해 매칭을 수행한다. 첫 번째 매칭에서 파이썬은 해당되는 case 블록의 명령물을 실행한 다음 match 블록의 끝으로 건너뛴다. 그리고 프로그램 나머지 부분을 계속 수행한다. case 사이에 ‘fall-through’가 없지만, 하나의 case 블록에서 여러 가능한 case를 처리하는 자신만의 논리를 만들 수 있다(이후 더 자세히 설명).
또 매칭의 일부나 전부를 캡처해 다시 사용할 수 있다. 위 예제에서 case unknown_command의 경우, 다시 사용할 수 있도록 unknown_command 변수에서 값을 ‘캡처’한다.
파이썬 구조적 패턴 매칭으로 변수에 대해 매칭 중요한 부분이다. case 명령문에 변수 이름을 나열한다고 해서, 명명한 변수 내용에 대해 매칭이 되는 것은 아니다. case의 변수들은 매칭할 값을 캡처하는 데 사용된다.
변수의 내용에 대해 매칭하기 원한다면, 변수를 이넘(Enum, 열거형) 같이 점이 있는 이름으로 표시해야 한다. 다음을 예로 들 수 있다.
반드시 이넘을 사용하지 않아도 된다. 점이라는 속성을 가진 이름이면 된다. 그렇지만 이넘이 파이썬에서 가장 친숙한 방식으로 사용되는 경우가 많다.
파이썬 구조적 패턴 매칭으로 여러 요소에 대해 매칭 패턴 매칭을 효과적으로 사용하기 위해서는 사전 조회의 대체재로만 사용하지 않는 것이 아주 중요하다. 매칭하고자 하는 부분의 구조를 설명해야 한다. 이 경우, 매칭하려는 요소의 수나 조합을 토대로 매칭을 수행할 수 있다.
더 복잡한 예제이다. 여기에서 사용자는 명령을 입력하면서, 그 다음에 선택적으로 파일 이름을 입력한다.