• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

Switch case 관련 질문

23.02.01 05:59 작성 조회수 198

0

 안녕하세요.

switch case(후반전) 강의 3분 30초 부분에서 궁금한 점이 생겨 질문을 남깁니다. 제가 알기로는 switch case를 사용할 때, 그 case에 해당하는 경우에만 수행 동작을 실행하는 걸로 알고 있습니다.

이 영상에서도 마찬가지로 grade를 1이라고 가정할 때, case 1은 조건을 만족하므로 price에 1000을 더해주었습니다. 하지만 그 이후 case 2를 만족하지 않음에도 불구하고 1000을 더해주고, case 3도 만족하지 않지만 1000을 더한 결과 값이 출력 되었습니다.

즉, break를 넣으면 switch문을 빠져나갈 수 있다는 것은 알고 있으나, 왜 break가 없어졌다는 이유로 다음 case의 수행 동작이 실행되는지 잘 모르겠습니다. 이와 관련하여 매커니즘을 조금 더 자세히 설명해주시면 감사할 것 같습니다..!

답변 1

답변을 작성해보세요.

1

안녕하세요?
말씀하신 것처럼 Switch Case 는 대부분의 경우 특정 케이스에 대한 동작만 수행되도록 구현합니다. case 1 의 동작만 수행하거나 또는 case 2 의 동작만 수행하거나 등과 같이 말이죠. Switch Case 문에서 break 의 역할은 Switch Case 문을 탈출하는 것입니다. 그래서 다음과 같이 코드를 작성하게 되면 각 케이스 동작만 수행하고 탈출하는 결과를 얻게 되죠.

int num = 1;
switch (num) {
    case 1:
        System.out.println("케이스 1 동작");
        break;
    case 2:
        System.out.println("케이스 2 동작");
        break;
    default:
        System.out.println("그 외 동작");
}

그런데 이때 break 가 사라지게 된다면 특정 케이스의 동작을 수행하고 나서 바로 다음줄로 내려가게 됩니다. 이 때는 case 2: 이건 case 4: 건 상관 없이 그저 일반적인 코드가 동작하는 것처럼 위에서 아래 방향으로 순차적으로 수행이 돼요. 만약 앞의 예제에서 case 1: 의 break 문이 빠지면 어떻게 될까요?

int num = 1;
switch (num) {
    case 1:
        System.out.println("케이스 1 동작");
    case 2:
        System.out.println("케이스 2 동작");
        break;
    default:
        System.out.println("그 외 동작");
}

num 값이 1일 때 case 1: 에 해당하므로 case 1 의 동작은 올바르게 수행될 것입니다. 그런데 다음 줄에서 break 없으므로 프로그램의 실행 흐름은 바로 밑에 있는 이 코드로 넘어가게 됩니다.

    case 2:
        System.out.println("케이스 2 동작");

마치 case 2: 는 주석처리 된 것처럼 말이죠.

//    case 2:
        System.out.println("케이스 2 동작");

그래서 num 값이 1일 때의 실제 동작 흐름은 아래 2문장의 코드를 순차적으로 실행하는 것과 같습니다.

System.out.println("케이스 1 동작");
System.out.println("케이스 2 동작");

정리하면, Switch Case 는 주어진 값에 해당하는 case 를 먼저 찾습니다. 그리고 그 case 의 위치로부터 아래 방향으로 쭉 실행됩니다. 그러다가 break 를 만나면 Switch Case 문을 탈출하게 되고, 만나지 않으면 계속해서 아래 방향으로 내려오면서 모든 문장을 실행하게 됩니다.
다음과 같이 말이죠 😀

switch (값) {
    case 1: // 값이 1인 경우, 이 문장부터 break 를 만날 때까지 모든 문장 실행
    case 2: // 값이 2인 경우, 이 문장부터 break 를 만날 때까지 모든 문장 실행
    case 3: // 값이 3인 경우, 이 문장부터 break 를 만날 때까지 모든 문장 실행
    ...
}


sallyever 님을 위한 특별한 퀴즈입니다 🎁
학교 선생님들이 시험 문제를 출제하고 있습니다. 총 5개의 문제인데 어떤 문제들은 객관식으로, 또 다른 문제들은 서술형으로 출제하고자 합니다. 아래와 같이 코드를 작성했을 때 실행 결과는 어떻게 될까요? 한 번 머릿속으로 유추하신 다음에 직접 실행하셔서 예상과 맞는지 확인해주세요 😊

for (int i = 1; i <= 5; i ++) {
    System.out.print("문제 " + i + " : "); // 문제 1 :
    switch (i) {
        case 1:
        case 2:
        case 3:
            System.out.println("객관식");
            break;
        case 4:
        case 5:
            System.out.println("서술형");
            break;
    }
}

감사합니다.

sallyever님의 프로필

sallyever

질문자

2023.02.01

내주신 문제의 답은 객관식, 객관식, 객관식, 서술형, 서술형이 되겠네요.

 

자세한 답변 감사드립니다! 완전하게 이해했어요ㅎㅎㅎ

딩동댕!! 👏👏👏👏👍
이제 다음 파트로 넘어가셔도 좋습니다 😊