매일 업데이트
2023-09-06 13:55 8 min

[Explained] Python에서 Switch-Case를 구현하는 방법

파이썬에서 스위치 케이스와 유사한 기능을 구현하고 싶으신가요? 스위치 케이스 동작을 모방하기 위해 사용할 수 있는 여러 가지 접근법을 살펴보겠습니다.

만약 C나 JavaScript 프로그래밍 경험이 있다면, switch-case 구문에 익숙할 것입니다. 그렇다면 왜 스위치 케이스 구조가 필요할까요?

다양한 작업(또는 코드 블록) 집합이 있다고 가정해 봅시다. 실행할 작업(코드 블록)은 변수나 표현식의 값에 따라 달라집니다.

몇 가지 예시를 들어보겠습니다:

  • 점수에 따라 학생에게 성적을 부여
  • 사용자의 선택에 따라 문자열 처리 기법을 선택
  • 사용자 입력에 따라 두 숫자에 대한 산술 연산을 수행

이처럼 스위치 케이스 구조는 이러한 로직을 구현하는 데 유용합니다. 변수나 표현식의 값에 따라 여러 가능한 작업 중 하나를 실행해야 할 때 말이죠.

파이썬에는 내장된 스위치 케이스 구조가 없지만, 유사한 기능을 구현하는 데 사용할 수 있는 몇 가지 방법이 있습니다. 이 글에서는 그러한 방법들을 자세히 알아볼 것입니다.

파이썬에서 스위치 케이스 동작 에뮬레이션

예시를 통해 파이썬에서 스위치 케이스 동작을 어떻게 흉내 낼 수 있는지 살펴봅시다.

다음과 같은 간단한 프로그램을 작성해 보겠습니다:

  • 단어 목록에서 무작위로 단어를 선택합니다 (파이썬 문자열).
  • 문맥을 제공하고 사용자에게 메시지를 표시합니다. 선택된 단어에 대해 수행할 문자열 작업(문자열 조작)을 정의합니다.
  • 기본 동작을 포함하여 대소문자 변경 (소문자, 대문자, 제목 케이스 등)에 대한 작업을 설명합니다. 필요에 따라 내장된 파이썬 문자열 메서드를 활용합니다.
  • 사용자에게 입력을 요청합니다. 입력값은 기본적으로 문자열이므로 정수로 변환합니다.

파이썬 문자열은 변경 불가능합니다. 따라서 문자열 메서드는 원본 문자열을 수정하지 않고, 필요한 변경 사항을 반영한 새로운 문자열 복사본을 반환합니다. 사용할 파이썬 문자열 메서드를 간략히 검토해 보겠습니다.

문자열 메서드 설명
lower() 모든 문자가 소문자인 문자열의 복사본을 반환합니다.
upper() 모든 문자가 대문자인 문자열의 복사본을 반환합니다.
title() 제목 케이스(각 단어의 첫 글자를 대문자로)로 형식화된 문자열의 복사본을 반환합니다.
swapcase() 대문자는 소문자로, 소문자는 대문자로 변환된 문자열의 복사본을 반환합니다.

다음 코드 조각은 단어 목록에서 임의의 단어를 선택하고 사용자 입력을 받습니다.

import random

# 선택할 단어 목록
word_list = ["Python", "programming", "Hello", "world", "context", "Switch"]

# 목록에서 무작위로 단어 선택
word = random.choice(word_list)

# 사용자에게 문맥과 사용 가능한 옵션 제공
print("환영합니다! 무작위로 선택된 단어가 있습니다.")
print("단어를 조작할 옵션을 선택하세요:")
print("1. 소문자로 변경")
print("2. 대문자로 변경")
print("3. 제목 케이스로 변경")
print("4. 대소문자 반전")
print("5. 기본 동작")

# 사용자 옵션 입력 받기
option = int(input("옵션을 입력하세요: "))
  

다음은 사용자의 선택에 따라 문자열 'Python'이 어떻게 수정되는지 보여주는 예입니다.

이제 프로그램을 실행하면 다음과 같이 입력하라는 메시지가 표시됩니다.

환영합니다! 무작위로 선택된 단어가 있습니다.

단어를 조작할 옵션을 선택하세요:
1. 소문자로 변경
2. 대문자로 변경
3. 제목 케이스로 변경
4. 대소문자 반전
5. 기본 동작

옵션을 입력하세요:
  

이제 다양한 접근법을 구현해 보겠습니다.

If-Elif-Else 사다리 사용

이 접근법에서는 일련의 if-elif-else 문을 사용하여 미리 정의된 옵션과 비교하여 사용자 선택을 확인합니다. 그런 다음 사용자의 입력에 따라 해당 코드 블록을 실행합니다.

# if-elif-else 구문 사용

if option == 1:
    result = word.lower()
elif option == 2:
    result = word.upper()
elif option == 3:
    result = word.title()
elif option == 4:
    result = word.swapcase()
else:
    result = word

print(f"무작위 단어는 {word}이고 결과는 {result}입니다.")
  

여기서:

  • if-elif 문을 사용하여 사용자 입력을 각 옵션과 비교합니다.
  • 일치하는 항목이 발견되면 해당 코드 블록을 실행합니다.
  • if-elif 조건 중 어느 것도 일치하지 않으면 기본 동작을 위해 else 블록을 실행합니다.

이제 스크립트를 실행하고 선택 사항을 입력하고 출력을 확인할 수 있습니다.

환영합니다! 무작위로 선택된 단어가 있습니다.

단어를 조작할 옵션을 선택하세요:
1. 소문자로 변경
2. 대문자로 변경
3. 제목 케이스로 변경
4. 대소문자 반전
5. 기본 동작

옵션을 입력하세요: 2

무작위 단어는 Switch이고 결과는 SWITCH입니다.
  

if-elif-else 사다리는 구현하기 쉽지만, 유지 관리하기 어려울 수 있습니다. 이 예에서는 5가지 사례(기본 동작 포함)가 있지만, 실제로는 더 많은 경우가 있을 수 있습니다. 이렇게 긴 if-elif-else 사다리는 피해야 할 코드 냄새입니다.

이제 유지 관리가 가능한 구현을 살펴보겠습니다.

사전 매핑 및 일급 함수 사용

파이썬 사전과 함수를 활용하여 스위치 케이스 동작을 에뮬레이트할 수 있습니다.

📑 파이썬 함수는 일급 시민입니다.

파이썬에서 함수는 일급 시민입니다. 함수를 정의하고 호출하는 것 이상의 작업을 할 수 있습니다.

  • 함수를 정의한 후에는 다른 변수에 할당하거나, 리스트의 요소나 사전의 값 등으로 사용할 수 있습니다.
  • 또한, 함수를 다른 함수의 인수로 전달하거나 함수에서 다른 함수를 반환하는 것도 가능합니다.

이 접근 방식에서는 사전을 사용하여 사용자 선택을 해당 기능이나 작업에 매핑합니다. if-elif문의 긴 체인을 피할 수 있으므로, 여러 선택지를 처리하는 더 효율적인 방법입니다.

먼저 다양한 문자열 작업에 대한 함수를 정의해 보겠습니다.

# 각 옵션에 대한 함수 정의
def lower_case(word):
    return word.lower()

def upper_case(word):
    return word.upper()

def title_case(word):
    return word.title()

def swap_case(word):
    return word.swapcase()
  

다음으로:

  • 키는 사용자 선택이고 값은 수행할 기능 또는 작업인 "선택 항목"이라는 사전을 만듭니다.
  • 사용자 선택에 따라 선택된 작업을 가져오기 위해 사전 메서드 get()을 사용합니다. 사전에서 선택 항목을 찾을 수 없을 경우, 람다 함수로 지정된 기본 작업을 제공합니다.
  • 그런 다음 임의의 단어에 대해 선택된 작업을 실행합니다.
# 함수를 사전에 저장
options = {
    1: lower_case,
    2: upper_case,
    3: title_case,
    4: swap_case,
}

# 사전을 사용하여 적절한 함수를 선택하고 호출
result = options.get(option, lambda x: x)(word)

print(f"무작위 단어는 {word}이고 결과는 {result}입니다.")
  

샘플 출력은 다음과 같습니다.

환영합니다! 무작위로 선택된 단어가 있습니다.

단어를 조작할 옵션을 선택하세요:
1. 소문자로 변경
2. 대문자로 변경
3. 제목 케이스로 변경
4. 대소문자 반전
5. 기본 동작

옵션을 입력하세요: 4

무작위 단어는 Hello이고 결과는 hELLO입니다.
  

Match-Case 사용

📝 참고: match-case 문을 사용하려면 파이썬 3.10 이상 버전이 필요합니다.

파이썬 3.10부터는 match문을 사용하여 스위치 케이스와 유사한 구문을 구현할 수 있습니다. 간단한 구문을 사용하는 match문은 여러 사례를 처리하는 더 직관적인 방법을 제공합니다. _ (밑줄)은 기본 케이스로 사용됩니다.

match-case를 사용하여 예제를 다시 작성하는 방법은 다음과 같습니다:

  • match문을 사용하여 사용자 입력을 여러 케이스와 비교합니다.
  • 각 케이스는 선택 사항과 해당 선택 사항이 일치할 경우 실행할 코드를 지정합니다.
  • _ (밑줄)은 기본 케이스 역할을 하며, 다른 케이스와 일치하는 것이 없을 때 코드를 실행합니다.
match option:
    case 1:
        result =  word.lower()
    case 2:
        result = word.upper()
    case 3:
        result = word.title()
    case 4:
        result = word.swapcase()
    case _:
        result = word  # 기본 동작: 문자열을 그대로 반환

print(f"무작위 단어는 {word}이고 결과는 {result}입니다.")
  

이제 스크립트를 실행하고 출력을 확인할 수 있습니다.

환영합니다! 무작위로 선택된 단어가 있습니다.

단어를 조작할 옵션을 선택하세요:
1. 소문자로 변경
2. 대문자로 변경
3. 제목 케이스로 변경
4. 대소문자 반전
5. 기본 동작

옵션을 입력하세요: 2
무작위 단어는 world이고 결과는 WORLD입니다.
  

match문은 스위치 케이스 구성을 구현하는 편리한 방법을 제공하지만, 더욱 유용한 구조적 패턴 매칭을 지원하여 스위치 케이스 동작을 에뮬레이션하는 것 이상의 작업을 수행할 수 있습니다.

마무리

파이썬에서 스위치 케이스 기능을 달성하기 위한 다양한 접근법을 요약해 보겠습니다.

  • if-elif-else 사다리는 구현하기 쉽지만 유지 관리가 어려울 수 있습니다. 따라서 확인해야 할 옵션이 많지 않은 경우에만 최소한으로 사용하십시오.
  • 파이썬 사전과 함수를 활용하여 스위치 케이스 동작을 에뮬레이트할 수 있습니다. 다양한 선택 사항과 해당 기능을 각각 사전의 키와 값으로 포함시킵니다.
  • 파이썬 3.10에 도입된 match-case문은 간단하고 직관적인 구문으로 스위치 케이스 구성을 구현하는 데 도움이 됩니다. 그러나 match-case문은 더욱 흥미로운 구조적 패턴 매칭 사용 사례에 적합합니다.

이 튜토리얼의 코드 예제는 GitHub에서 찾을 수 있습니다. 코딩 면접을 준비하고 있다면 주요 파이썬 면접 질문 모음을 확인해 보세요.

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.