Topic 3: switch문과 다중 분기 🎛️
🎯 학습 목표
- switch문의 구조와 동작 원리를 이해할 수 있다
- if-else if문과 switch문의 차이점을 설명할 수 있다
- break문의 중요성을 이해하고 올바르게 사용할 수 있다
🔀 switch문이란?
switch문은 하나의 변수 값에 따라 여러 가지 경우 중 하나를 선택하여 실행하는 조건문입니다.
기본 구조
switch (변수) {
case 값1:
// 값1일 때 실행할 코드
break;
case 값2:
// 값2일 때 실행할 코드
break;
default:
// 어떤 case에도 해당하지 않을 때 실행할 코드
break;
}
간단한 예제 - 성적 등급
#include <iostream>
using namespace std;
int main() {
char grade;
cout << "성적 등급을 입력하세요 (A, B, C, D, F): ";
cin >> grade;
switch (grade) {
case 'A':
cout << "우수! 90점 이상입니다." << endl;
break;
case 'B':
cout << "양호! 80점 이상입니다." << endl;
break;
case 'C':
cout << "보통! 70점 이상입니다." << endl;
break;
case 'D':
cout << "미흡! 60점 이상입니다." << endl;
break;
case 'F':
cout << "불합격! 60점 미만입니다." << endl;
break;
default:
cout << "잘못된 등급입니다." << endl;
break;
}
return 0;
}
🚨 break문의 중요성
break문을 빼먹으면 fall-through 현상이 발생합니다!
break문이 없는 경우
#include <iostream>
using namespace std;
int main() {
int day = 2;
switch (day) {
case 1:
cout << "월요일" << endl;
// break 없음!
case 2:
cout << "화요일" << endl;
// break 없음!
case 3:
cout << "수요일" << endl;
break;
}
// 결과: "화요일"과 "수요일" 모두 출력됨!
return 0;
}
의도적인 fall-through 활용
때로는 fall-through를 의도적으로 사용하기도 합니다:
#include <iostream>
using namespace std;
int main() {
char vowel;
cout << "알파벳을 입력하세요: ";
cin >> vowel;
switch (vowel) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
cout << "모음입니다!" << endl;
break;
default:
cout << "자음입니다!" << endl;
break;
}
return 0;
}
🆚 if-else vs switch
언제 switch를 사용할까?
switch를 사용하기 좋은 경우:
- ✅ 하나의 변수를 여러 값과 비교할 때
- ✅ 정수, 문자, 열거형 값을 비교할 때
- ✅ case가 많을 때 (가독성이 좋음)
if-else를 사용해야 하는 경우:
- ✅ 범위 비교가 필요할 때 (
age >= 18
) - ✅ 복합 조건이 필요할 때 (
age > 18 && score >= 80
) - ✅ 실수(float, double) 비교가 필요할 때
비교 예제
// 같은 기능, 다른 구현
// 1. if-else 방식
if (month == 1) {
cout << "January" << endl;
} else if (month == 2) {
cout << "February" << endl;
} else if (month == 3) {
cout << "March" << endl;
} else {
cout << "Other month" << endl;
}
// 2. switch 방식 (더 깔끔함)
switch (month) {
case 1: cout << "January" << endl; break;
case 2: cout << "February" << endl; break;
case 3: cout << "March" << endl; break;
default: cout << "Other month" << endl; break;
}
🎮 실전 예제 - 간단한 계산기
#include <iostream>
using namespace std;
int main() {
double num1, num2;
char op;
cout << "첫 번째 숫자: ";
cin >> num1;
cout << "연산자 (+, -, *, /): ";
cin >> op;
cout << "두 번째 숫자: ";
cin >> num2;
switch (op) {
case '+':
cout << "결과: " << (num1 + num2) << endl;
break;
case '-':
cout << "결과: " << (num1 - num2) << endl;
break;
case '*':
cout << "결과: " << (num1 * num2) << endl;
break;
case '/':
if (num2 != 0) {
cout << "결과: " << (num1 / num2) << endl;
} else {
cout << "0으로 나눌 수 없습니다!" << endl;
}
break;
default:
cout << "잘못된 연산자입니다!" << endl;
break;
}
return 0;
}
🎮 실전 예제 - 메뉴 선택하기
#include <iostream>
using namespace std;
int main() {
int choice;
cout << "===== 학생 관리 시스템 =====" << endl;
cout << "1. 학생 등록" << endl;
cout << "2. 성적 입력" << endl;
cout << "3. 성적 조회" << endl;
cout << "4. 평균 계산" << endl;
cout << "5. 종료" << endl;
cout << "선택: ";
cin >> choice;
switch (choice) {
case 1:
cout << "📝 학생을 등록합니다..." << endl;
cout << "학생 등록 기능을 선택했습니다." << endl;
break;
case 2:
cout << "📊 성적을 입력합니다..." << endl;
cout << "성적 입력 기능을 선택했습니다." << endl;
break;
case 3:
cout << "🔍 성적을 조회합니다..." << endl;
cout << "성적 조회 기능을 선택했습니다." << endl;
break;
case 4:
cout << "🧮 평균을 계산합니다..." << endl;
cout << "평균 계산 기능을 선택했습니다." << endl;
break;
case 5:
cout << "프로그램을 종료합니다. 안녕히 가세요!" << endl;
break;
default:
cout << "⚠️ 잘못된 선택입니다. 1-5 사이의 숫자를 선택해주세요." << endl;
break;
}
return 0;
}
🎲 간단한 게임 아이템 상점
#include <iostream>
using namespace std;
int main() {
int choice;
cout << "=== 게임 아이템 상점 ===" << endl;
cout << "1: 포션" << endl;
cout << "2: 검" << endl;
cout << "3: 방패" << endl;
cout << "선택: ";
cin >> choice;
switch (choice) {
case 1:
cout << "🧪 포션을 선택했습니다!" << endl;
cout << "HP를 회복할 수 있어요." << endl;
break;
case 2:
cout << "⚔️ 검을 선택했습니다!" << endl;
cout << "공격력이 증가해요." << endl;
break;
case 3:
cout << "🛡️ 방패를 선택했습니다!" << endl;
cout << "방어력이 증가해요." << endl;
break;
default:
cout << "❌ 잘못된 선택입니다!" << endl;
break;
}
return 0;
}
🎯 도전 과제
과제 1: 요일 계산기
1-7까지의 숫자를 입력받아 해당하는 요일을 출력하는 프로그램을 작성하세요.
- 평일인지 주말인지도 표시해야 합니다.
힌트 보기
switch(day) {
case 1:
case 2:
case 3:
case 4:
case 5:
cout << "평일입니다." << endl;
break;
case 6:
case 7:
cout << "주말입니다!" << endl;
break;
}
과제 2: 간단한 학점 계산기
문자 학점(A, B, C, D, F)을 입력받아 평점을 출력하세요.
- A = 4.0, B = 3.0, C = 2.0, D = 1.0, F = 0.0
// 힌트 구조
char grade;
cout << "학점을 입력하세요 (A, B, C, D, F): ";
cin >> grade;
// 여기에 코드를 작성하세요
🔑 switch문 사용 팁
1. switch에서 사용 가능한 타입
// ✅ 사용 가능
int number = 5;
char letter = 'A';
// ❌ 사용 불가
float decimal = 3.14; // 실수는 사용 불가
string text = "hello"; // 문자열은 사용 불가
2. case 레이블은 상수여야 함
int x = 10;
switch(value) {
case 10: // ✅ OK: 상수
case 'A': // ✅ OK: 문자 상수
// case x: // ❌ ERROR: 변수는 사용 불가
}
3. 뻼지 습관 - default는 마지막에
switch(value) {
case 1:
// 코드
break;
case 2:
// 코드
break;
default: // 항상 마지막에 위치
// 기본 처리
break;
}
📝 핵심 정리
- switch문: 하나의 변수를 여러 값과 비교하여 분기
- break문: 각 case를 끝내고 switch를 빠져나가는 역할
- fall-through: break가 없으면 다음 case로 계속 진행
- default: 어떤 case에도 해당하지 않을 때 실행
- 제약사항: 정수, 문자만 사용 가능
다음 토픽에서는 여러 조건을 중첩하여 사용하는 중첩 조건문과 삼항 연산자에 대해 배워보겠습니다!
Last updated on