강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

김민규님의 프로필 이미지
김민규

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

switch-case문

switch - case문 예제 질문

해결된 질문

작성

·

147

0

안녕하세요. 3분 40초대에 나오는 switch - case에 관련된 예제를 푸는 과정에서 질문이 생겨서 글을 작성하게 되었습니다.

제가 기존에 알던 switch - case는 if - else를 조금 더 편리하게 사용하기 위해 도입된 조건문이었습니다.
그런데, 해당 강의에서 배운 내용은 조금 달랐습니다.

 

여기 나온 예제를 들어 설명한다면,

 

  1. 변수 len에 저장된 값은 5이다.

  2. switch문의 기준은 len(=5)가 된다.

  3. 각 case에 대하여 len과 값을 비교했을 때의 결과를 기준으로 다음과 같이 실행한다.

3-1. case의 값이 참일 경우, (case의 값 == len) 해당 case를 기준으로 하여 break를 만날 때 까지 하위에 위치한 case들에 있는 statement들을 모두 실핸한다.

3-2. case의 값이 거짓일 경우, 다음 case로 넘어간다(처음으로 case의 값이 참일 경우를 만날 때 까지)

 

  1. 실행하는 statement에 break가 포함될 경우, 해당 switch문을 종료하고 빠져나온다.

  2. 끝까지 break를 만나지 못했을 경우, default의 statement를 실행 후 해당 switch문을 종료하고 빠져나온다.

이러한 논리 구조에 따라

case 3, 4는 건너뛰고

case 5에서 true이기 때문에 statement를 실행(len -= 1 -> len = 4)

처음으로 true인 case를 만났기 때문에, 해당 case 기준 아래에 위치한 모든 case를 실행

--> case 6 실행(len에 저장된 값은 6이 아님에도 불구하고) (len += 3 -> len = 7)

--> case 6에서 break를 만남 -> 종료

 

결과 : len = 7

이런 식으로 진행 되는 것 맞는 건가요?

그렇다면,

case 5의 statement가 len+=2;일 경우에도 case 7을 찾아가는 것이 아닌, case 6을 찾아가서 실행 후 break가 되는 것인가요??

마지막으로, default 키워드는 switch에서 모든 case가 false가 나왔을 때 실행되는 것이 아닌, break를 한 번도 만나지 못했을 경우 가장 마지막에 실행되는 것인가요??

긴 질문 읽어주셔서 감사합니다!

답변 2

1

안녕하세요, 인프런 AI 인턴입니다. 김민규님.

질문 주셔서 감사합니다. switch-case 문은 조건문 구조 중 하나로, if-else 보다 각 조건에 대한 명확한 분기를 통해 코드의 가독성을 높이는 역할을 합니다. 주로 C, Java와 같은 언어에서 사용됩니다. 설명해주신 것처럼 조금 헷갈릴 수 있는 구조를 갖고 있어 이 질문에 대해 자세히 설명드리겠습니다.

switch-case 문 동작 방식의 핵심:

  1. switch 문이 case 문을 만나는 방식:

    • len의 값이 해당 case 와 맞는 경우부터 아래의 모든 case 문이 실행됩니다. 이를 “fall-through” 현상이라고 부르며, break 문을 만나기 전까지는 계속해서 실행이 진행됩니다.
  2. break 문의 역할:

    • case 문 내에서 break 를 만나면 현재 switch-case 문 블록이 종료되어 빠져 나가게 됩니다. break 가 없으면 다음 case 문으로 계속 진행됩니다.
  3. default 문의 역할:

    • switch 문 내에 조건을 만족하는 case 가 없어 case 문을 전부 지나칠 때나, case 문을 실행하고도 break 를 만나지 못했을 때 default 문이 실행됩니다.

질문에 대한 상세 설명:

  • 질문 1: case 5의 statement가 len += 2; 일 경우에도 case 7을 찾아가는 것이 아닌, case 6을 찾아가서 실행 후 break가 되는 것인가요?

    • 네, 맞습니다. case 5 의 조건이 참이 되어 실행된 이후에는 아래로 “fall-through” 하여 case 6 이 실행됩니다. len 값에 관계없이 case 6break 를 만날 때까지 실행됩니다.
  • 질문 2: default 키워드는 모든 case가 false가 나왔을 때 실행되는 것인가요?

    • default 는 사실 case 문들이 시작되기 전까지만 충족되지 않았을 때가 아니라, break 문이 전혀 없는 경우에도 마지막에 실행될 수 있습니다.

유사한 질문과 답변 링크:

switch-case 문과 관련된 질문을 다룬 답변들이 있습니다. 아래 링크를 통해 보다 자세한 설명과 예제를 보실 수 있습니다.

이 링크들을 확인하시면, 김민규님께서 switch-case 문의 동작 방식에 대해 더 명확한 이해를 얻으실 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요,

 

해당 값에 대해서는 처음에 switch에서만 판단하고 그 다음부터는 코드 상에서 아래로 죽 흐릅니다.

len += 2; 의 경우에도 바로 아래의 코드가 실행될 겁니다. case안에서 발생하는 값으로 다시 다른 case로 간다고 생각하지 마시고, 단순히 아래 case로만 넘어가시면 됩니다.

 


default는 단순합니다. 모든 case에서 매칭이 안되어야 합니다.


defaultcase 문 어디든 위치할 수 있지만, 일반적으로 마지막에 배치됩니다.

  • default가 실행되면, break가 있는 경우 switch 문이 종료됩니다.

  • break가 없다면, 아래의 case 문이 없더라도 계속 실행됩니다. (fall-through 발생)

 

중간에 위치할 수 있다는 점에서 예제 3개를 드립니다.

 

예제 1: default가 마지막에 위치하고, break 있음

public class SwitchExample {
    public static void main(String[] args) {
        int num = 5;
        switch (num) {
            case 1:
                System.out.println("One");
                break;
            case 2:
                System.out.println("Two");
                break;
            default:
                System.out.println("Not One or Two");
                break;  // switch 종료
        }
    }
}

출력값: Not One or Two -- 매칭되는 것이 없으니 default 실행

 

예제 2: default가 중간에 위치하고, break 없음

public class SwitchExample {
    public static void main(String[] args) {
        int num = 3;
        switch (num) {
            case 1:
                System.out.println("One");
                break;
            default:
                System.out.println("Default case");
            case 2:
                System.out.println("Two");
                break;
            case 3:
                System.out.println("Three");
                break;
        }
    }
}

출력값: Three -- 매칭되는 것이 있으니 default 무시

 

예제 3: default가 중간에 있고, break 없음 (fall-through: 아래 케이스로 흘러가는 현상 발생)

public class SwitchExample {
    public static void main(String[] args) {
        int num = 4;
        switch (num) {
            case 1:
                System.out.println("One");
                break;
            default:
                System.out.println("Default case"); // 실행됨
            case 2:
                System.out.println("Two"); // fall-through 발생
            case 3:
                System.out.println("Three"); // fall-through 발생
                break;
        }
    }
}

출력값:

Default case

Two

Three

 -- 매칭되는 것이 없어서 default가 실행되었으나, break가 중간에 없어 아래 case로 흐름

 


모든 case에 해당하지 않으면 default가 실행되고, 중간에 break가 없으면 아래 케이스로 흐른다고 생각하시면 됩니다.

 

 

김민규님의 프로필 이미지
김민규
질문자

결론적으로 말하면, switch - case는 if - else if - else를 축약한, 완전히 기능이 똑같은 제어문이라고 파악하면 안된다는 것일까요??

 

결국, switch에서 제공한 비교군(조건문)과 각 case 별로 제공한 대조군(값)들에 대하여, 처음 같아지는 순간 이후에는 break를 만날 때 까지 계속해서 첫 true가 나오는 case를 포함한 아래의 case들(default 포함)에 달려있는 statement를 실행하고, 그 중 break 키워드가 포함된 statement가 존재할 경우, 해당 코드까지만 실행 후 종료한다. 라고 이해가 됩니다!

 

친절한 답변 감사드립니다!

주말코딩님의 프로필 이미지
주말코딩
지식공유자

네 다르게 이해하셔야 합니다. if는 해당 조건이 참인지를 봅니다.

예를 들어 python에서는 True도 참이고 1 < 2도 참이죠. C언어에서는 0을 제외한 숫자가 오면 참입니다. 이런 경우 case로 생각하면 다르게 생각할 수도 있습니다. 해당 값이 없으면 갈 case가 없을 수 있으니까요.

 

특정 조건이 되면 갈라진다(분기)는 것은 똑같은데, switch-case는 참/거짓 여부로 가는 것은 아닙니다.

김민규님의 프로필 이미지
김민규

작성한 질문수

질문하기