파이썬에 switch/case 문이 없는 이유
파이썬 역사 상 switch를 구현하려는 시도는 있었습니다. 다만 switch를 어떤 방식으로 구현하는 게 가장 효과적일지 결정하는 것이 까다롭고, 무엇보다 인기가 없어서 결국 구현되지 못했습니다. 대신 파이썬 공식 문서는 if...elif를 권장합니다.
switch 문을 어떻게 구현할지 결정하기 쉽지 않다
파이썬을 개발한 귀도 반 로섬 역시 파이썬에는 switch/case(스위치/케이스) 문이 없다는 사실을 잘 알고 있었습니다.
귀도는 PEP 3103에서 switch와 관련된 논의를 시작했습니다. 여기서 귀도는 switch 문을 구현하는 방법에 대한 여러 가지 가능성을 제시했습니다:
-
문법:
switch와case의 들여쓰기 방식방식 1:
switch EXPR: case EXPR: SUITE방식 2 (
case는 들여쓰기하지 않음):switch EXPR: case EXPR: SUITE -
if/elif방식 vsdict기반 방식: 내부적으로switch를if/elif처럼 다루기 vs 딕셔너리를 만들어 매핑하는 방식으로 처리하기
각각 장단점이 있기 때문에 어느 한 방식만을 선택하기가 쉽지 않습니다.
저조한 인기
파이썬은 이미 switch 없이도 잘 작동하고 있습니다. 그런데도 굳이 switch 문을 추가해야 할까요?
파이콘(PyCon) 2007 에서 switch 문에 관한 설문 조사를 진행했으나, 사람들은 이 기능에 큰 관심을 보이지 않았습니다. 이로서 switch/case 문과 관련된 논의는 폐기됩니다.
대안: if...elif 또는 dict
그렇다면 파이썬에서는 switch/case 대신 무엇을 권장하고 있을까요? 파이썬 공식 문서인 Design and History FAQ를 살펴보면:
-
일반적인 경우:
if...elif -
많은 경우 중에서 하나를 택해야 하는 경우: 딕셔너리와 함수를 매핑
예시:
def function_1(...): ... functions = {'a': function_1, 'b': function_2, 'c': self.method_1, ...} func = functions[value] func()