switch-case문과 fall-through (if-elif-else)
요약
switch-case문의 기본 구조와 fall-through, Python의 if-elif-else를 알아봅니다. 정보처리기사 실기에 자주 출제되는 조건 분기 문제를 풀기 위한 핵심 개념을 정리합니다.
switch-case 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| switch | 변수의 값에 따라 분기 | switch(a) |
| case | 특정 값일 때 실행 | case 1: |
| break | switch문 종료 | break; |
| default | 어떤 case에도 해당 안 될 때 | default: |
| fall-through | break 없이 다음 case 실행 | (아래 설명) |
switch-case 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| switch | 변수의 값에 따라 분기 | switch(a) |
| case | 특정 값일 때 실행 | case 1: |
| break | switch문 종료 | break; |
| default | 어떤 case에도 해당 안 될 때 | default: |
| fall-through | break 없이 다음 case 실행 | (아래 설명) |
if-elif-else 핵심 정리
Python에는 switch-case문이 없습니다. 대신 if-elif-else를 사용합니다.
| 개념 | 설명 | 예시 |
|---|---|---|
| if | 첫 번째 조건 검사 | if a == 1: |
| elif | 추가 조건 검사 | elif a == 2: |
| else | 어떤 조건에도 해당 안 될 때 | else: |
switch-case문이란?
switch-case문은 변수의 값에 따라 여러 경우 중 하나를 선택해서 실행하는 조건문입니다.
기본 예시
score / 10의 결과에 따라 실행되는 case가 달라집니다.
| score / 10 결과 | 실행되는 case | 출력 |
|---|---|---|
| 10 | case 10 → case 9 (fall-through) | A |
| 9 | case 9 | A |
| 8 | case 8 | B |
| 7 | case 7 | C |
| 그 외 | default | F |
switch-case문이란?
switch-case문은 변수의 값에 따라 여러 경우 중 하나를 선택해서 실행하는 조건문입니다.
기본 예시
score / 10의 결과에 따라 실행되는 case가 달라집니다.
| score / 10 결과 | 실행되는 case | 출력 |
|---|---|---|
| 10 | case 10 → case 9 (fall-through) | A |
| 9 | case 9 | A |
| 8 | case 8 | B |
| 7 | case 7 | C |
| 그 외 | default | F |
if-elif-else문이란?
Python에는 C/Java의 switch-case문이 없습니다. 대신 if-elif-else로 여러 조건을 순서대로 검사합니다.
기본 예시
조건을 위에서부터 순서대로 검사하고, 처음으로 참인 조건의 코드만 실행합니다.
| 조건 | score = 85 | 실행 여부 |
|---|---|---|
score >= 90 | 85 >= 90 → 거짓 | 건너뜀 |
score >= 80 | 85 >= 80 → 참 | 실행 |
score >= 70 | 검사 안 함 | 건너뜀 |
else | 검사 안 함 | 건너뜀 |
score = 85일 때
| 단계 | 계산 |
|---|---|
| 1. score / 10 계산 | 85 / 10 = 8 |
| 2. case 8로 이동 | printf("B") 실행 |
| 3. break로 종료 | switch문 탈출 |
| 출력 결과 | B |
fall-through (break 없이 실행)
break가 없으면 해당 case 실행 후 다음 case도 연속으로 실행됩니다. 이를 fall-through라고 합니다.
실행 흐름
| 단계 | 실행 | 출력 |
|---|---|---|
| 1 | case 2로 이동 | - |
| 2 | "B" 출력 | B |
| 3 | case 3으로 fall-through | C |
| 4 | default로 fall-through | D |

break의 역할
break는 switch문을 즉시 종료합니다.
break 있음 vs 없음 비교
| 상황 | a = 2일 때 출력 |
|---|---|
| 모든 case에 break 있음 | B |
| 모든 case에 break 없음 | BCD |
default의 위치
default는 보통 마지막에 위치하지만, 어디에 있어도 동작합니다.
일치하는 case가 없으면 default로 이동합니다. default에 break가 없으면 그 아래 case도 fall-through됩니다.
여러 case 묶기
같은 동작을 하는 case는 연속으로 작성하여 묶을 수 있습니다.
case 10:에 코드가 없으면 바로 case 9:로 fall-through되어, 10과 9 모두 같은 코드를 실행합니다.
fall-through (break 없이 실행)
break가 없으면 해당 case 실행 후 다음 case도 연속으로 실행됩니다. 이를 fall-through라고 합니다.
실행 흐름
| 단계 | 실행 | 출력 |
|---|---|---|
| 1 | case 2로 이동 | - |
| 2 | "B" 출력 | B |
| 3 | case 3으로 fall-through | C |
| 4 | default로 fall-through | D |

break의 역할
break는 switch문을 즉시 종료합니다.
break 있음 vs 없음 비교
| 상황 | a = 2일 때 출력 |
|---|---|
| 모든 case에 break 있음 | B |
| 모든 case에 break 없음 | BCD |
여러 case 묶기
같은 동작을 하는 case는 연속으로 작성하여 묶을 수 있습니다.
case 10:에 코드가 없으면 바로 case 9:로 fall-through되어, 10과 9 모두 같은 코드를 실행합니다.
실전 예제: 복합 대입 연산자와 fall-through
기출문제에서 자주 나오는 패턴으로, 복합 대입 연산자 (+=, -=)와 fall-through가 결합된 문제입니다.
단계별 실행 과정
i = 3이므로 case 3으로 진입합니다. break가 없으므로 이후 모든 case가 fall-through됩니다.
| 단계 | 실행되는 case | 코드 | k 값 |
|---|---|---|---|
| - | 초기값 | int k = 1; | 1 |
| 1 | case 3 | k = 0 | 0 |
| 2 | case 4 (fall-through) | k += 3 (0 + 3) | 3 |
| 3 | case 5 (fall-through) | k -= 10 (3 - 10) | -7 |
| 4 | default (fall-through) | k-- (-7 - 1) | -8 |
출력 결과: -8
복합 대입 연산자 정리
| 연산자 | 의미 | 예시 (k = 3일 때) |
|---|---|---|
+= | 더한 후 대입 | k += 3 -> k는 6 |
-= | 뺀 후 대입 | k -= 10 -> k는 -7 |
-- | 1 감소 | k-- -> k는 2 |
C/Java의 switch-case와 비교
C/Java의 switch-case문은 변수의 값이 정확히 일치하는 case로 이동합니다. Python의 if-elif-else는 조건식을 자유롭게 작성할 수 있어 더 유연합니다.
switch-case를 if-elif-else로 변환
C/Java의 switch-case를 Python으로 변환하면 다음과 같습니다.
C/Java와의 핵심 차이점
| 구분 | C/Java switch-case | Python if-elif-else |
|---|---|---|
| fall-through | break 없으면 다음 case 실행 | 해당 없음 (하나만 실행) |
| break 필요 | 필수 (없으면 fall-through) | 불필요 |
| 조건 | 값 일치만 가능 | 범위, 비교 등 자유롭게 가능 |
| default | default: | else: |
if-elif-else 실행 흐름
if-elif-else는 위에서 아래로 조건을 순서대로 검사합니다. 처음으로 참인 조건의 코드만 실행하고 나머지는 건너뜁니다.
실행 흐름
여러 조건 묶기
C/Java에서 여러 case를 묶는 것처럼, Python에서는 or 연산자를 사용합니다.
in 연산자를 사용하면 더 간결하게 작성할 수 있습니다.
실전 예제: type()을 활용한 조건 분기
기출문제에서 출제된 패턴으로, type() 함수로 자료형을 비교하여 분기하는 문제입니다.
단계별 실행 과정
각 인자의 자료형에 따라 다른 분기가 실행됩니다.
| 호출 | 인자 값 | 자료형 | 일치하는 조건 | 반환값 |
|---|---|---|---|---|
func(a) | "100.0" | str | type("") == type("") → elif | 5 (len("100.0")) |
func(b) | 100.0 | float | 어디에도 해당 안 됨 → else | 20 |
func(c) | (100, 200) | tuple | 어디에도 해당 안 됨 → else | 20 |
출력 결과: 45 (5 + 20 + 20)
type() 비교 정리
| 값 | type() 결과 | type(100)과 비교 | type("")과 비교 |
|---|---|---|---|
"100.0" | str | 거짓 | 참 |
100.0 | float | 거짓 | 거짓 |
(100, 200) | tuple | 거짓 | 거짓 |
100 | int | 참 | 거짓 |