inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

나도코딩의 자바 기본편 - 풀코스 (20시간)

Switch Case (후반전)

Switch case 관련 질문

해결된 질문

271

sallyever

작성한 질문수 1

0

 안녕하세요.

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

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

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

객체지향 oop java switch

답변 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;
    }
}

감사합니다.

0

sallyever

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

 

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

0

나도코딩

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

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

1

145

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

118

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

70

1

사고력 키우는 법이 어떤게 있나요?

0

93

2

getter setter

0

101

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

78

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

75

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

114

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

152

2

영상이 재생이 안됩니다.

0

167

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

116

2

응용이 어렵습니다.

0

206

2

IntelliJ가 보이지 않습니다.

0

184

3

JDK 버전 문의

0

128

2

BlackBox 파일 내에서 메소드 정의

0

136

1

동기화

0

120

2

Iterator 문의

0

104

1

코드 순서 문의

0

141

1

클래스 메소드

0

149

2

Quiz_05 관련 질문드립니다 !

0

118

2

다운로드가 안됩니다

0

165

2

다형성

0

119

2

HashMap

0

80

2