파이썬에서 switch문을 사용하는 방법

jjanmo·2021년 2월 1일
1
post-thumbnail

결론부터 이야기 하면 파이썬에서는 switch문이 존재하지 않는다. 파이썬에서 switch문을 구현하는 마법을 기대했다면, 지금 당장 뒤로가기 버튼을 누르시길... 😅    단, 다른 방법은 있음!!

파이썬에서의 switch문에 대한 역사(?)를 잠시 이야기하자면, 귀도 반 로섬 형께서는 이미 switch문에 없다는 것을 알고 있었다고 한다. 그래서 실제로 이 부분에 있어서 수많은 사람들이 논의하였고 이에 대한 기록이 PEP(Python Enhancement Proposal)이라는 이름으로 문서화 되어있다. ( switch문에 대한 PEP 3103 ) 결론적으로 switch문의 이러한 논의에도 불구하고 커뮤니티의 주된 주제가 되지 못했다.( == 인기가 없었다 😭 ) 또한 파이썬에서 switch문이 없이도 잘 작동하기에 굳이 또다른 syntax를 만들 필요성을 느끼지 못했기에 현재처럼 switch문이 없는 상태로 유지되고 있다고 한다.

PEP 3103 논의에서 단순히 switch문은 필요없으니 끝!! 이렇게 끝난 것은 아니고 대체 방법에 대해서 2가지를 제안하였다. 그 방법들에 대해서 알아보자.

그런데 난 왜 파이썬에서 switch문을 생각한 것일까?

초보자를 위한 파이썬 300제 에서 조우(?)한 문제이다!

나는 위와 같은 문제를 풀 때, 보통 switch문을 생각한다. 그래서 만약에 자바스크립트로 위의 문제를 푼다면 아래와 같이 풀었을 것이다.

const firstNumber = "010"; 
//입력값을 받아서 번호 앞자리를 잘라서 할당한다. 예시로 임의로 할당하였다. 
//switch문을 중심으로 살펴보자.

let telecomName;
switch (firstNumber) {
  case "011": {
    telecomName = "SKT";
    break;
  }
  case "016": {
    telecomName = "KT";
    break;
  }
  case "019": {
    telecomName = "LGU";
    break;
  }
  default: {
    telecomName = "알 수 없는";
    break;
  }
}
console.log(`당신은 ${telecomName} 사용자입니다.`);

이러한 코드를 생각하고 파이썬의 switch문을 생각해봤지만, 전혀 생각이 나지않아서 구글링 시작 후 여기까지 오게되었다. 파이썬만의 재미있는 방법을 알게되어서 나같은 초보자가 파이썬을 좀 더 재미있게 배울 수 있는 방법이라 생각해서 기록을 남겨보고자한다.

첫번째 방법 : if~elif문

파이썬에는 elif라는 키워드가 있다. 보통 else if와 같은 개념이다. 파이썬에서는 좀 더 짧게 사용하는 것 같다. 이를 이용하면 위의 switch문 코드를 아래와 같이 바꿀 수 있다.

firstNumber = input().split("-")[0] 
# -를 기준으로 자른 후(배열로 반환됨) 배열의 첫번째 값을 가져온다

if firstNumber == "011":
    telecom = "SKT"
elif firstNumber == "016":
    telecom = "KT"
elif firstNumber == "019":
    telecom = "LGU"
else:
    telecom = "알 수 없는"
print(f'당신은 {telecom} 사용자입니다.')

사실 이렇게 간편한지 느끼지 못했다. 이렇게 비교하면서 써보니까 확실히 switch-case문보다 짧고 간결하다는 것을 새삼 느낄 수 있었다.

두번째 방법 : dictionary를 이용

파이썬에서는 dictionary라는 자료구조가 있다. key와 value로 한쌍을 이루어 존재하고, 순서가 없는 구조이다. dictionary에 접근하고자할 때는 key를 통해서만 접근이 가능하다. key는 중복이 될 수 없다. 이렇게 보다보면 dictionary는 자바스크립트의 객체와 같다고 생각할 수 있다. 이러한 dictionary에는 많은 내장메소드가 있는데, 그 중에서 get(key, default)을 사용하여 switch문과 같은 기능을 구현할 수 있다.

def switch(key):
  telecom = {"011" : "SKT", "016": "KT", "019" : "LGU"}.get(key, "알 수 없는")
  print(f'당신은 {telecom} 사용자입니다.')

firstNumber = input().split("-")[0] 
switch(firstNumber)

dictionary의 get메소드를 이용하여서 함수를 만들 수 있다. get은 dictionary에서 key에 해당하는 value를 반환해준다. 또한 해당하는 key가 없으면 get의 두번째 인자로 받은, default에 해당하는 것을 반환한다.

막 코드를 보면 어려운 느낌은 없어서 더 재미있는 것 같다, 할만해야 재미도 느껴지기에 😎

파이썬에서는 위 두가지 중에 무엇을 권장할까? 일반적으로 첫번째 방법을 권장한다. 하지만 조건(선택사항)이 많다면, 두번째 방법처럼 dictionary와 함수를 맵핑하여 사용하길 권장한다. 사실 두번째 방법은 자바스크립트에서도 자주 사용하는 방법이다. 특히 뭔가 포맷팅해야할 것을 객체 형식으로 만들어서 키를 통해서 쉽게 가져오고자 할 때 자주 사용했다. 언어만 다르지 기본적으로 통하는 개념과 생각이 있는 것 같다.

참고

파이썬에 switch/case 문이 없는 이유
switch/case 문이 없는 파이썬

부족한 글 읽어주셔서 감사합니다. 언제나 내용에 대한 피드백은 환영입니다. 앞으로 조금이라도 도움이 될 수 있는 글을 쓰기 위해서 노력하겠습니다.

profile
눈길을 걸어갈 때 어지럽게 걷지 말기를.

2개의 댓글

중부중 AI 동아리반에서 참고했습니다 감사합니다.

1개의 답글