자바로 짜여진 코드가 다음과 같다고 가정해 봅시다.
import java.util.Scanner;
public class GFRIEND_AlbumInfo {
public static void main(String[] args) {
int n;
Scanner in = new Scanner(System.in);
System.out.println("1. EP 1집");
System.out.println("2. EP 2집");
System.out.println("3. EP 3집");
System.out.println("4. 정규 1집");
System.out.println("5. EP 4집");
System.out.println("Select a number. (1-5)");
n = in.nextInt();
switch (n) {
case 1:
System.out.println("EP 1집: Season of Glass / 유리구슬 (Glass Bead)");
break;
case 2:
System.out.println("EP 2집: Flower Bud / 오늘부터 우리는 (Me Gustas Tu)");
break;
case 3:
System.out.println("EP 3집: SNOWFLAKE / 시간을 달려서 (Rough)");
break;
case 4:
System.out.println("정규 1집: LOL / 너 그리고 나 (NAVILLERA)");
break;
case 5:
System.out.println("EP 4집: THE AWAKENING / FINGERTIP");
break;
default:
System.out.println("No data");
}
}
}
1. EP 1집 2. EP 2집 3. EP 3집 4. 정규 1집 5. EP 4집 Select a number. (1-5) 2 EP 2집: Flower Bud / 오늘부터 우리는 (Me Gustas Tu)
이 코드는 1부터 4까지의 숫자 중 하나를 입력받으면 그 숫자에 해당하는 데이터를 출력하기 위한 코드로 여기서 16번 줄부터 31번 줄까지가 switch 조건문입니다. 이 예제에서는 2를 입력하고 엔터를 친 결과 2에 해당하는 코드를 수행하기 위해 21번 줄로 가서 코드를 실행시키고 조건문을 빠져나오게 됩니다.
이 코드를 파이썬으로 옮기고자 합니다. 그런데 문제가 하나 있습니다. 파이썬에서는 if … elif … else 조건문은 존재하지만, 위의 16번 줄부터 31번 줄까지의 부분에 해당하는 switch 조건문이 존재하지 않는다는 점입니다. 그렇다면, 파이썬에서는 switch 조건식을 쓸 수 없는 것일까요?
그렇지 않습니다. 파이썬에서 switch 조건문이 없다는 문제점을 우회적으로 해결할 수 있는 방법이 있는데, 그 방법들은 다음과 같습니다.
첫째: if문을 여러 개 중첩하는 방법
print("1. EP 1집")
print("2. EP 2집")
print("3. EP 3집")
print("4. 정규 1집")
print("5. EP 4집")
a = int(input("Select a number. (1-5)") )
if a == 1:
print("EP 1집: Season of Glass / 유리구슬 (Glass Bead)")
elif a == 2:
print("EP 2집: Flower Bud / 오늘부터 우리는 (Me Gustas Tu)")
elif a == 3:
print("EP 3집: SNOWFLAKE / 시간을 달려서 (Rough)")
elif a == 4:
print("정규 1집: LOL / 너 그리고 나 (NAVILLERA)")
elif a == 5:
print("EP 4집: THE AWAKENING / FINGERTIP")
else:
print("No data")
말 그대로 if … elif … else 조건문을 여러 개 중첩하는 방법입니다. 파이썬 문법 구조의 특성상 if문을 중첩해 쓰더라도 가독성이 크게 떨어지지는 않기 때문에 이 방법도 무리없이 쓸 수 있습니다. 하지만 단점이라면 모든 분기에 조건식 형태로 조건을 지정해 주어야 한다는 점입니다.
둘째: 딕셔너리를 이용하는 방법
albums = {1: "EP 1집: Season of Glass / 유리구슬 (Glass Bead)",
2: "EP 2집: Flower Bud / 오늘부터 우리는 (Me Gustas Tu)",
3: "EP 3집: SNOWFLAKE / 시간을 달려서 (Rough)",
4: "정규 1집: LOL / 너 그리고 나 (NAVILLERA)",
5: "EP 4집: THE AWAKENING / FINGERTIP"}
print("1. EP 1집")
print("2. EP 2집")
print("3. EP 3집")
print("4. 정규 1집")
print("5. EP 4집")
a = int(input("Select a number. (1-5)") )
print(albums.get(a, "No data") )
파이썬에서도 자바스크립트나 PHP 등에서 쓰이는 키와 데이터 값을 한 쌍으로 갖는 딕셔너리 자료형이 있습니다. 이 딕셔너리 자료형을 이용하여 마치 switch 조건문과 비슷한 처리를 구현할 수 있습니다.
def album(x):
return {1: "EP 1집: Season of Glass / 유리구슬 (Glass Bead)",
2: "EP 2집: Flower Bud / 오늘부터 우리는 (Me Gustas Tu)",
3: "EP 3집: SNOWFLAKE / 시간을 달려서 (Rough)",
4: "정규 1집: LOL / 너 그리고 나 (NAVILLERA)",
5: "EP 4집: THE AWAKENING / FINGERTIP"
}.get(x, "No data")
print("1. EP 1집")
print("2. EP 2집")
print("3. EP 3집")
print("4. 정규 1집")
print("5. EP 4집")
a = int(input("Select a number. (1-5)") )
print(album(a) )
이렇게 함수를 선언해서 처리할 수도 있습니다.
def album_glass():
print("EP 1집: Season of Glass / 유리구슬 (Glass Bead)")
def album_flower():
print("EP 2집: Flower Bud / 오늘부터 우리는 (Me Gustas Tu)")
def album_snow():
print("EP 3집: SNOWFLAKE / 시간을 달려서 (Rough)")
def album_lol():
print("정규 1집: LOL / 너 그리고 나 (NAVILLERA)")
def album_awakening():
print("EP 4집: THE AWAKENING / FINGERTIP")
print("1. EP 1집")
print("2. EP 2집")
print("3. EP 3집")
print("4. 정규 1집")
print("5. EP 4집")
a = int(input("Select a number. (1-5)") )
albums = {1: album_glass,
2: album_flower,
3: album_snow,
4: album_lol,
5: album_awakening}
try:
albums[a]()
except KeyError:
print("No data")
조건에 따라 다른 처리를 하고 싶다면 이런 식으로 쓸 수도 있습니다.
이와 같이 파이썬에서는 switch 조건문이 없어도 switch 조건문이 있는 것처럼 코딩을 할 수 있습니다.