Skip to Content
💻 코리아IT아카데미 신촌 - 프로그래밍 학습 자료
C++ 프로그래밍Unit 3: 제어문Topic 3: switch문과 다중 분기

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