[C/C++] 8. switch / case 문과 삼항 연산자

찰규

·

2026년 8월 1일 (30일 전)

앞서 if / else 조건문과 비교 연산자를 알아보았다. 이번 글에서는 특정 변수의 값에 따라 깔끔하게 분기 처리하는 switch / case, 핵심 키워드인 break, 그리고 if - else 구문을 한 줄로 축약할 수 있는 삼항 연산자를 정리한다.

1. switch / case 구문의 기본 구조

switch 문은 기준이 되는 변수의 값과 일치하는 case 위치로 이동하여 코드를 실행하는 분기문이다.

int select = 2;

switch (select) {
    case 1:
        // select가 1일 때 실행
        break;
    case 2:
        // select가 2일 때 실행
        break;
    default:
        // 어떤 case에도 해당하지 않을 때 실행 (if문의 else 역할)
        break;
}
  • case [값]:: 평가 대상 변수의 값과 일치하는 지점부터 실행한다.

  • default:: 일치하는 case가 하나도 없을 때 실행된다. (생략 가능)

2. if-else if vs switch-case 비교

구분if - else ifswitch - case
조건식범위 지정 및 복잡한 논리식 가능 (x > 10 && y < 5)정수/문자 형태의 단일 변수 값 비교 위주
가독성조건이 많아질수록 코드가 길어지고 복잡해짐값이 딱 떨어지는 여러 조건 처리 시 가독성이 뛰어남

가령 게임에서 상태 값(0: 대기, 1: 이동, 2: 공격, 3: 사망)에 따라 연동되는 로직을 구현할 때는 switch-case 문을 사용하는 것이 훨씬 직관적이다.

3. switch 문의 핵심: break의 중요성

switch 문 내에서 break를 만나면 해당 switch 블록({})을 완전히 탈출한다.

break 누락 시 발생하는 현상 (Fall-Through)

만약 case 내부에 break를 작성하지 않으면, 문법 에러는 나지 않지만 다음 case의 코드까지 연속해서 실행되어 최종 default까지 도달하는 치명적인 논리 버그가 발생한다.

int input = 1;

switch (input) {
    case 1:
        // break가 없으면 case 2로 내려감
    case 2:
        // break가 없으면 default로 내려감
    default:
        // 결국 여기까지 모두 실행됨
}

⭕ 의도적인 break 생략 (OR 연산 효과)

여러 case에 대해 동일한 로직을 수행해야 할 때는 의도적으로 break를 생략하여 로직을 하나로 묶을 수 있다. 이는 if 문에서 논리합(||) 연산자를 사용하는 것과 같다.

char key = 'w';

switch (key) {
    case 'w':
    case 'W': // 'w' 또는 'W' 입력 시 공통 실행
        moveUp();
        break;
}

4. 한 줄 조건문: 삼항 연산자 (?:)

삼항 연산자는 간단한 if - else 구문을 단 한 줄로 축약할 수 있는 연산자다.

[조건식] ? [참일 때의 ] : [거짓일 때의 ]
int hp = 80;

// if - else 구문 사용 시
int status;
if (hp > 0) {
    status = 1; // 생존
} else {
    status = 0; // 사망
}

// 삼항 연산자 사용 시 (한 줄로 축약)
int status = (hp > 0) ? 1 : 0;

삼항 연산자 사용 시 주의사항

  • 삼항 연산자는 코드를 간결하게 만들어 주지만, 조건이 중첩되거나 길어지면 오히려 코드 가독성이 크게 떨어진다.

  • 따라서 단순히 값을 대입하거나 반환하는 직관적이고 명확한 상황에서만 선택적으로 사용하는 것이 좋다.

마무리하며

  • 값이 깔끔하게 떨어지는 다중 분기에는 if-else if보다 switch-case가 가독성 측면에서 유리하다.

  • switch 문 작성 시 break 누락으로 인한 논리 오류를 항상 경계하자.

  • 삼항 연산자는 간단한 대입식에서만 한정적으로 사용하여 코드 깔끔함과 가독성을 모두 챙기자.