
안녕하세요. 성조입니다.
최근에 회사에서 사수님이 Python switch-case 문은 왜 없는지에 대한 질문을 주셨을 때. 존재는 안 하는 것은 알고 있었지만 명확한 해답을 내놓을 수 없었습니다.
다른 인기 있는 언어들에는 switch-case 문이 있는데 Python에 없다는 것이면 그 기능을 충분히 다른 기능으로 대체했기 때문이 아닐까 생각도 들었습니다. 또한 이번 포스팅에서는 Python 3.10 버전부터 추가된 match-case 문도 설명할 예정입니다.
자료조사 후 주관적 의견을 추가해서 포스팅한 것이므로 100% 완벽한 답이라고 정의할 수 없으나 최대한 열심히 작성했습니다. 좋게 봐주시면 감사드리겠습니다!
결론
파이썬 언어에는 다른 언어와 다르게 Switch-case 문이 존재하지 않는다.
파이썬(Python)에 Switch-case문이 없는 이유는 필요성이 없기 때문이다. 하지만 로직을 구성하는데 필요한 부분도 있었기 때문에 Python 3.10 버전을 기준으로 match-case문이 추가적으로 생겼다.
여담
파이썬 언어에도 Switch-case 문이 없는 것에 대해서 다양한 개발자들이 얘기한 시기가 있었다. 하지만 반대 측 입장이 더 우세했으며, 굳이 넣을 필요가 없다는 이유로. 충분히 대체할 수 있는 코드 활용 방법들이 존재한다는 것이 Switch-case 문을 추가하지 안 자는 여론이 있었고 그렇게 진행됐다. 하지만 시간이 지나고 Python은 3.10 버전 이후로 Switch-case의 상위 호환 버전인 match-case 문을 만들었다. 그래서 이번 포스팅에서는 왜 필요성이 없을지 고민하는 분들을 위해 Switch-case를 대체하는 다양한 방법들과 match-case 문을 작성하고, 어떤 장점이 있는지 정리하려 한다.
Switch-case 문을 대체하는 가독성이 좋은 방법
1. if - elif - else 문을 사용한 예시
def operation(operator, x, y):
if operator == '+':
return x + y
elif operator == '-':
return x - y
elif operator == '*':
return x * y
elif operator == '/':
return x / y
else:
return "잘못된 연산자입니다."
result = operation('+', 2023, 3)
print(result) # 2026
if - elif - else 문을 활용하여 Switch-case 연산을 대신해서 진행하는 방법이다.
필요한 기능을 하나의 조건문으로 묶어서 연산을 진행할 수 있도록 만드는 것이다.
2. 함수와 딕셔너리를 활용한 예시
def operation(operator, x, y):
return {
'+': lambda: x + y,
'-': lambda: x - y,
'*': lambda: x * y,
'/': lambda: x / y
}.get(operator, lambda: "잘못된 연산자입니다.")()
result = operation('+', 2023, 3)
print(result) # 2026
함수에 딕셔너리와 람다 함수를 활용하여 Switch-case 문을 대체할 수 있다.
3. 클래스를 만들고, 내부 메서드를 활용하여 스위치 역할을 만드는 예시
class Calculator:
def add(self, a, b):
return a + b
def subtract(self, a, b):
return a - b
def multiply(self, a, b):
return a * b
def divide(self, a, b):
return a / b if b != 0 else None
def calculate(self, operator, a, b):
return getattr(self, operator)(a, b)
my_calculator = Calculator()
print(my_calculator.calculate('add', 3, 4)) # 7
print(my_calculator.calculate('subtract', 3, 4)) # -1
print(my_calculator.calculate('multiply', 5, 5)) # 25
print(my_calculator.calculate('divide', 4, 1)) # 4.0
클래스 객체를 만들고, 각 메소드를 정의하고, return 값들을 활용하여 연산을 처리할 수 있다.
4. Python 3.10버전부터 지원되는 match-case 문 예시
def calculate(operator, x, y):
match operator:
case '+':
return x + y
case '-':
return x - y
case '*':
return x * y
case '/':
return x / y
case _:
return "잘못된 연산자입니다."
print(calculate('+', 5, 5)) # 10
print(calculate('-', 1, 5)) # -4
print(calculate('*', 5, 2)) # 10
print(calculate('/', 10, 5)) # 2.0
print(calculate('Q', 10, 5)) # 잘못된 연산자입니다.
Switch-case 문은 대체 할 필요가 없었다는 여론을 가졌으면서 Python 3.10 버전에서는 왜 match-case라는 Switch-case 문과 유사한 문법을 만들었는지 정리할 차례이다.
match-case를 활용하는 이유는 다음과 같다.
1. 패턴 매칭을 지원한다.
패턴 매칭(Pattern matching)은 AI 분야에서 자주 활용되는 개념으로 자연어 처리, 이미지 인식, 음성 인식 등 다양한 분야에서 사전에 정의된 패턴을 찾는 알고리즘 작업을 의미한다. 다른 언어에 비해서 조금 더 AI 분야에 많이 활용되는 Python 언어로는 지원된다면 당연히 좋은 부분이 된다.
2. 함수의 반환 값으로 활용할 수 있다.
함수의 값으로 자유롭게 반환할 수 있는 장점이 있다.
3. 임의의 데이터도 처리 가능하다.
동적 타입의 파이썬을 활용하기 때문에 정적으로 언어의 타입이 정해진 언어와 다르게 형태에 상관없이 모든 데이터를 다룰 수 있다. 변수가 유연하게 활용될 수 있다는 것이다. 하지만 타입이 자유로운 것은 오히려 독이 될 수 있다는 것을 명심하자.
Switch-case 문을 대체하는 가독성은 좋지 않지만 가능한 방법
1. 삼항 연산자를 활용한 예시
temp = 1 if [조건_1] else 2 if [조건_2] else 3 if [조건_3] else 0
조건에 맞는 경우 값들을 대입하는 삼항 연산자이다. 조건의 복잡도가 올라가면 코드를 읽는 가독성이 너무 큰 폭으로 나빠질 수 있으므로 지양되는 방법이라 생각한다.
2. 논리 연산자를 활용한 예시
test_case = 1
temp = test_case == 1 and 1 or test_case == 2 and 2 or test_case == 3 and 3 or 0
print(temp)
논리 연산자를 활용하여 값을 입력한 경우이다.
이런 논리 연산자를 활용한 경우에도 조건은 맞출 수 있으나 가독성이 너무 안 좋아지기 때문에 지양하는 것을 목표로 하자.
올바르지 못한 내용이나 궁금한 내용이 있다면 언제든지 댓글 달아주세요.
조금 더 개선할 수 있는 방향이 있다면 지식을 공유해 주시면 감사드리겠습니다.
더 좋은 포스팅 작성할 수 있도록 노력해 보겠습니다.
다음 포스팅 때 뵙겠습니다.
- 참조 자료 -
What is the Python equivalent for a case/switch statement?
Is there a Python equivalent for the switch statement?
stackoverflow.com
https://stackoverflow.com/questions/39775536/python-switch-case
Python switch case
I am trying to use dictionary as switch case on python, however, the parameter does not seem to be pass to the called function, please help: def switchcase(num,cc): def fa(num): out= n...
stackoverflow.com
https://stackoverflow.com/questions/69779176/python-switch-case-statement-adaptation
Python Switch/Case Statement Adaptation
Ok, at the risk of being ridiculed for not 'trying harder', I have a scenario that I've been attempting to adapt to a pythonic switch case statement. I know python has the new match method in 3.10...
stackoverflow.com
https://docs.python.org/3/faq/design.html
Design and History FAQ
Contents: Design and History FAQ- Why does Python use indentation for grouping of statements?, Why am I getting strange results with simple arithmetic operations?, Why are floating-point calculatio...
docs.python.org
https://docs.python.org/ko/3.10/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python
설계와 역사 FAQ — Python 3.10.10 문서
Guido van Rossum은 그룹화에 들여쓰기를 사용하는 것이 매우 우아하고 일반적인 파이썬 프로그램의 명확성에 크게 기여한다고 믿습니다. 대부분의 사람은 시간이 좀 흐른 후에 이 기능을 사랑하는
docs.python.org
https://docs.python.org/3/whatsnew/3.10.html
What’s New In Python 3.10
Editor, Pablo Galindo Salgado,. This article explains the new features in Python 3.10, compared to 3.9. Python 3.10 was released on October 4, 2021. For full details, see the changelog. Summary – R...
docs.python.org
https://ko.wikipedia.org/wiki/%ED%8C%A8%ED%84%B4_%EB%A7%A4%EC%B9%AD
패턴 매칭 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전.
ko.wikipedia.org
'Python 🐍 > Python' 카테고리의 다른 글
[Python] 내장 함수 isinstance이란? (0) | 2023.05.17 |
---|---|
[Python] 파이썬 문자열 정리 (0) | 2023.03.11 |
[Python] 동적 타이핑(Dynamic typing)언어 (0) | 2022.10.04 |
[Python] 주피터 노트북(Jupyter Notebook), 아나콘다(Anaconda) 설치 및 간단한 장단점 (1) | 2022.10.04 |
[Python] 파이썬 기본 자료형 정리 (0) | 2022.09.29 |

안녕하세요. 성조입니다.
최근에 회사에서 사수님이 Python switch-case 문은 왜 없는지에 대한 질문을 주셨을 때. 존재는 안 하는 것은 알고 있었지만 명확한 해답을 내놓을 수 없었습니다.
다른 인기 있는 언어들에는 switch-case 문이 있는데 Python에 없다는 것이면 그 기능을 충분히 다른 기능으로 대체했기 때문이 아닐까 생각도 들었습니다. 또한 이번 포스팅에서는 Python 3.10 버전부터 추가된 match-case 문도 설명할 예정입니다.
자료조사 후 주관적 의견을 추가해서 포스팅한 것이므로 100% 완벽한 답이라고 정의할 수 없으나 최대한 열심히 작성했습니다. 좋게 봐주시면 감사드리겠습니다!
결론
파이썬 언어에는 다른 언어와 다르게 Switch-case 문이 존재하지 않는다.
파이썬(Python)에 Switch-case문이 없는 이유는 필요성이 없기 때문이다. 하지만 로직을 구성하는데 필요한 부분도 있었기 때문에 Python 3.10 버전을 기준으로 match-case문이 추가적으로 생겼다.
여담
파이썬 언어에도 Switch-case 문이 없는 것에 대해서 다양한 개발자들이 얘기한 시기가 있었다. 하지만 반대 측 입장이 더 우세했으며, 굳이 넣을 필요가 없다는 이유로. 충분히 대체할 수 있는 코드 활용 방법들이 존재한다는 것이 Switch-case 문을 추가하지 안 자는 여론이 있었고 그렇게 진행됐다. 하지만 시간이 지나고 Python은 3.10 버전 이후로 Switch-case의 상위 호환 버전인 match-case 문을 만들었다. 그래서 이번 포스팅에서는 왜 필요성이 없을지 고민하는 분들을 위해 Switch-case를 대체하는 다양한 방법들과 match-case 문을 작성하고, 어떤 장점이 있는지 정리하려 한다.
Switch-case 문을 대체하는 가독성이 좋은 방법
1. if - elif - else 문을 사용한 예시
def operation(operator, x, y):
if operator == '+':
return x + y
elif operator == '-':
return x - y
elif operator == '*':
return x * y
elif operator == '/':
return x / y
else:
return "잘못된 연산자입니다."
result = operation('+', 2023, 3)
print(result) # 2026
if - elif - else 문을 활용하여 Switch-case 연산을 대신해서 진행하는 방법이다.
필요한 기능을 하나의 조건문으로 묶어서 연산을 진행할 수 있도록 만드는 것이다.
2. 함수와 딕셔너리를 활용한 예시
def operation(operator, x, y):
return {
'+': lambda: x + y,
'-': lambda: x - y,
'*': lambda: x * y,
'/': lambda: x / y
}.get(operator, lambda: "잘못된 연산자입니다.")()
result = operation('+', 2023, 3)
print(result) # 2026
함수에 딕셔너리와 람다 함수를 활용하여 Switch-case 문을 대체할 수 있다.
3. 클래스를 만들고, 내부 메서드를 활용하여 스위치 역할을 만드는 예시
class Calculator:
def add(self, a, b):
return a + b
def subtract(self, a, b):
return a - b
def multiply(self, a, b):
return a * b
def divide(self, a, b):
return a / b if b != 0 else None
def calculate(self, operator, a, b):
return getattr(self, operator)(a, b)
my_calculator = Calculator()
print(my_calculator.calculate('add', 3, 4)) # 7
print(my_calculator.calculate('subtract', 3, 4)) # -1
print(my_calculator.calculate('multiply', 5, 5)) # 25
print(my_calculator.calculate('divide', 4, 1)) # 4.0
클래스 객체를 만들고, 각 메소드를 정의하고, return 값들을 활용하여 연산을 처리할 수 있다.
4. Python 3.10버전부터 지원되는 match-case 문 예시
def calculate(operator, x, y):
match operator:
case '+':
return x + y
case '-':
return x - y
case '*':
return x * y
case '/':
return x / y
case _:
return "잘못된 연산자입니다."
print(calculate('+', 5, 5)) # 10
print(calculate('-', 1, 5)) # -4
print(calculate('*', 5, 2)) # 10
print(calculate('/', 10, 5)) # 2.0
print(calculate('Q', 10, 5)) # 잘못된 연산자입니다.
Switch-case 문은 대체 할 필요가 없었다는 여론을 가졌으면서 Python 3.10 버전에서는 왜 match-case라는 Switch-case 문과 유사한 문법을 만들었는지 정리할 차례이다.
match-case를 활용하는 이유는 다음과 같다.
1. 패턴 매칭을 지원한다.
패턴 매칭(Pattern matching)은 AI 분야에서 자주 활용되는 개념으로 자연어 처리, 이미지 인식, 음성 인식 등 다양한 분야에서 사전에 정의된 패턴을 찾는 알고리즘 작업을 의미한다. 다른 언어에 비해서 조금 더 AI 분야에 많이 활용되는 Python 언어로는 지원된다면 당연히 좋은 부분이 된다.
2. 함수의 반환 값으로 활용할 수 있다.
함수의 값으로 자유롭게 반환할 수 있는 장점이 있다.
3. 임의의 데이터도 처리 가능하다.
동적 타입의 파이썬을 활용하기 때문에 정적으로 언어의 타입이 정해진 언어와 다르게 형태에 상관없이 모든 데이터를 다룰 수 있다. 변수가 유연하게 활용될 수 있다는 것이다. 하지만 타입이 자유로운 것은 오히려 독이 될 수 있다는 것을 명심하자.
Switch-case 문을 대체하는 가독성은 좋지 않지만 가능한 방법
1. 삼항 연산자를 활용한 예시
temp = 1 if [조건_1] else 2 if [조건_2] else 3 if [조건_3] else 0
조건에 맞는 경우 값들을 대입하는 삼항 연산자이다. 조건의 복잡도가 올라가면 코드를 읽는 가독성이 너무 큰 폭으로 나빠질 수 있으므로 지양되는 방법이라 생각한다.
2. 논리 연산자를 활용한 예시
test_case = 1
temp = test_case == 1 and 1 or test_case == 2 and 2 or test_case == 3 and 3 or 0
print(temp)
논리 연산자를 활용하여 값을 입력한 경우이다.
이런 논리 연산자를 활용한 경우에도 조건은 맞출 수 있으나 가독성이 너무 안 좋아지기 때문에 지양하는 것을 목표로 하자.
올바르지 못한 내용이나 궁금한 내용이 있다면 언제든지 댓글 달아주세요.
조금 더 개선할 수 있는 방향이 있다면 지식을 공유해 주시면 감사드리겠습니다.
더 좋은 포스팅 작성할 수 있도록 노력해 보겠습니다.
다음 포스팅 때 뵙겠습니다.
- 참조 자료 -
What is the Python equivalent for a case/switch statement?
Is there a Python equivalent for the switch statement?
stackoverflow.com
https://stackoverflow.com/questions/39775536/python-switch-case
Python switch case
I am trying to use dictionary as switch case on python, however, the parameter does not seem to be pass to the called function, please help: def switchcase(num,cc): def fa(num): out= n...
stackoverflow.com
https://stackoverflow.com/questions/69779176/python-switch-case-statement-adaptation
Python Switch/Case Statement Adaptation
Ok, at the risk of being ridiculed for not 'trying harder', I have a scenario that I've been attempting to adapt to a pythonic switch case statement. I know python has the new match method in 3.10...
stackoverflow.com
https://docs.python.org/3/faq/design.html
Design and History FAQ
Contents: Design and History FAQ- Why does Python use indentation for grouping of statements?, Why am I getting strange results with simple arithmetic operations?, Why are floating-point calculatio...
docs.python.org
https://docs.python.org/ko/3.10/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python
설계와 역사 FAQ — Python 3.10.10 문서
Guido van Rossum은 그룹화에 들여쓰기를 사용하는 것이 매우 우아하고 일반적인 파이썬 프로그램의 명확성에 크게 기여한다고 믿습니다. 대부분의 사람은 시간이 좀 흐른 후에 이 기능을 사랑하는
docs.python.org
https://docs.python.org/3/whatsnew/3.10.html
What’s New In Python 3.10
Editor, Pablo Galindo Salgado,. This article explains the new features in Python 3.10, compared to 3.9. Python 3.10 was released on October 4, 2021. For full details, see the changelog. Summary – R...
docs.python.org
https://ko.wikipedia.org/wiki/%ED%8C%A8%ED%84%B4_%EB%A7%A4%EC%B9%AD
패턴 매칭 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전.
ko.wikipedia.org
'Python 🐍 > Python' 카테고리의 다른 글
[Python] 내장 함수 isinstance이란? (0) | 2023.05.17 |
---|---|
[Python] 파이썬 문자열 정리 (0) | 2023.03.11 |
[Python] 동적 타이핑(Dynamic typing)언어 (0) | 2022.10.04 |
[Python] 주피터 노트북(Jupyter Notebook), 아나콘다(Anaconda) 설치 및 간단한 장단점 (1) | 2022.10.04 |
[Python] 파이썬 기본 자료형 정리 (0) | 2022.09.29 |