ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. 자바 조건문 (2) switch-case
    자바(Java) 강의 2020. 3. 16. 14:03

    Switch case는 조건에 따라 코드를 실행한다는 점에 있어서 if-else와 매우 유사하다. 만약 if-else를 모른다면 if-else를 먼저 학습한 후 switch-case를 공부하는 것을 추천한다.

    예상 독자

    목표

    • Switch Case 기본
    • Default case
    • 한 Case 문만 실행 시키는 방법
    • enum을 이용한 switch-case

    Switch Case 기본

    Switch-Case문은 어떻게 생겼는지 아래의 예제를 통해 알아보자.

    public class Main {
    public static void main(String args[]) {
    String str = "Hello";
    switch (str) {
    case "Hello":
    System.out.println("Case1 : Hello");
    }
    }
    }

    위 예제에서 switch는 str을 검사한다. (str == case에 걸린 값)가 참이라면 해당 케이스부터 switch의 끝까지 실행한다.

    switch (variable) {
    case condition: { // case 블록 }
    }

    • variable == condition인 경우 매칭되는 case블록 부터 스위치 블록의 끝까지 실행한다. 
    • condition에는 constant값만 들어갈 수 있으며 논리식(>,<,==)은 지원되지 않는다.
    • variable과 condition의 자료형은 같아야 한다.
    • char, byte, short, int, Character, Byte, Short, Integer, String, enum 자료형만 사용할 수 있다.

    스위치 블록의 끝까지 실행한다는 것은 무슨 뜻인가? 아래의 switch-case문을 실행시켜보자.

    public class Main {
    public static void main(String args[]) {
    String str = "Hello";
    switch (str) {
    case "Hi":
    System.out.println("Case0 : Hi");
    case "Hello":
    System.out.println("Case1 : Hello");
    case "World":
    System.out.println("Case2 : World");
    }
    }
    }

    그 결과는 다음과 같다.

    Case1 : Hello
    Case2 : World
    

    Hello 뿐만 아니라 World까지 출력되었다! Hi는 str과 다르니 출력되지 않았다고 하지만 World는 왜 출력되었을까? Switch-case는 case에 해당하는 블록만 실행하는게 아니라, 참인 case 아래로 전부 실행한다.


    switch-case의 이러한 특성이 if-elseif-else와 가장 큰 차이점이라 할 수 있다.

    Default Case

    default case는 항상 참인 케이스이다. switch에 들어오는 변수가 무엇이 되었든 default case는 항상 실행된다. 그래서 사람들이 모든 케이스에 해당되지 않을 경우 실행시키기 위해 많이 사용한다.

    public class Main {
    public static void main(String args[]) {
    String str = "-";
    switch (str) {
    case "Hi":
    System.out.println("Case0 : Hi");
    case "Hello":
    System.out.println("Case1 : Hello");
    case "World":
    System.out.println("Case2 : World");
    default:
    System.out.println("Default Case");
    }
    }
    }
    // 실행 결과
    //Default Case

    다만 주의할 점은 위에서 말했듯이 default case는 항상 참인 케이스일 뿐이며 동작 원리는 다른 case와 동일하다는 점이다. 예를들어 default를 case문의 맨 위에 놓으면 아래와 같은 결과를 확인 할 수 있다.

    public class Main {
    public static void main(String args[]) {
    String str = "-";
    switch (str) {
    default:
    System.out.println("Default Case");
    case "Hi":
    System.out.println("Case0 : Hi");
    case "Hello":
    System.out.println("Case1 : Hello");
    case "World":
    System.out.println("Case2 : World");
    }
    }
    }

    결과

    Default Case
    Case0 : Hi
    Case1 : Hello
    Case2 : World
    

    결과가 왜 이렇게 나왔을까 한번 생각 해 보도록 하자. 위에서 switch 변수 == case 값이 참이라면 해당 케이스부터 switch문 끝까지 실행시킨다고 설명했다. default 케이스는 항상 참이므로 default 케이스부터 아래까지 전부 실행시킨 것이다.

    한 Case문만 실행시키는 방법

    Break

    한 케이스만 실행시키고 싶다면 break문을 사용해 case를 빠져나오는 방법을 사용할 수 있다.

    public class Main {
    public static void main(String args[]) {
    String str = "Hello";
    switch (str) {
    case "Hi":
    System.out.println("Case0 : Hi");
    break;
    case "Hello":
    System.out.println("Case1 : Hello");
    break;
    case "World":
    System.out.println("Case2 : World");
    break;
    default:
    System.out.println("Default Case");
    }
    }
    }

    //결과
    Case1 : Hello

    break문을 사용하면 case에 해당하는 블록을 실행시킨 후 switch문을 빠져나온다.

    return

    switch-case문 실행 후 해당 매서드 내에서 더 실행 할 것이 없다면 메서드를 바로 return하는 방법도 있다.

    public class Main {
    public static void main(String args[]) {
    String str = "Hello";
    switch (str) {
    case "Hi":
    System.out.println("Case0 : Hi");
    return;
    case "Hello":
    System.out.println("Case1 : Hello");
    return;
    case "World":
    System.out.println("Case2 : World");
    return;
    default:
    System.out.println("Default Case");
    }
    }
    }

    Enum을 이용한 switch-case

    switch-case는 enum과 함께 자주 이용된다. 아래의 예제는 enum을 switch-case에 이용한 예제이다.

    public class Main {

    public enum Greeting { HI, HELLO, WORLD };

    public static void main(String args[]) {
    Greeting greeting = Greeting.HELLO;
    switch (greeting) {
    case HI:
    System.out.println("Case0 : Hi");
    break;
    case HELLO:
    System.out.println("Case1 : Hello");
    break;
    case WORLD:
    System.out.println("Case2 : World");
    break;
    default:
    System.out.println("Default Case");
    }
    }

    }

    이 포스트에서는 자바의 조건문 중 하나인 switch-case를 알아보았다. 다음 포스트에서는 배열과 반복문에 대해 설명하도록 한다.




    '자바(Java) 강의' 카테고리의 다른 글

    가비지 컬렉터(Garbage Collector)와 Mark & Sweep  (4) 2019.11.26
    JavaBean이란?  (0) 2019.09.02
    병행성(Concurrency)을 위한 CountDownLatch  (0) 2019.08.22
    19. 자바 Generics (2)  (2) 2019.06.24
    19. 자바 Generics (1)  (0) 2019.06.19

    댓글

f.software engineer @ All Right Reserved