본문 바로가기
Programming/Java

[Java] 조건문 - Switch

by 코딩하는 랄로 2023. 9. 23.
728x90

Switch문

switch문은 if문과 유사하면서 다르다. 조건식을 만족하는 경우에만 실행하는 것은 똑같지만 if문은 비교연산자를 이용한 조건식을 사용한다 switch문은 특정 변수안에 초기화 되어 있는 값이 어떤 값이냐에 따라 조건문을 실행한다.

 

예를 들어, 성별이 남성이면 "남성입니다", 여성이면 "여성입니다"를 출력하고 싶을 때 if문과 switch문으로 다음과 같이 작성할 수 있다.

 

public class Main {
	public static void main(String[] args) {
    	String gender = "Male";
        
        //if문
        if(gender.equals("Male") { // equals : String 비교 메소드
        	System.out.println("남성입니다");
        } else {
        	System.out.println("남성입니다");
        }
        
        //switch문
        switch(gender) {
        	case "Male" : System.out.println("남성입니다"); break;
            	case "Female" : System.out.println("여성입니다"); break;
        }
    }
}

 

위의 예시처럼 소괄호 안에 해당 변수를 넣어주고 case문을 통해 선언된 변수와 매칭이 되면 case문 내에 실행문이 실행되는 원리이다. 이때에 실행문을 실행한 뒤, break문을 통해 해당 case가 끝났음을 알려야 한다.

 

만약, break문이 없다면 다음 case문으로 넘어가서 실행되기 때문에 이 점 유의하여야 한다.( 이러한 현상을 응용하여 코드를 작성하는 것도 가능!!)

 

Default case

switch문에서 if문에서 else처럼 모든 조건을 만족하지 않을 때 실행되게 하는 default문이 존재한다. else문과 같이 switch문에서 모든 case가 다 선언된 제일 마지막 부분에 defualt문을 작성하여야 한다. 사용방법은 일반 case문과 똑같다.

 

 

 

Enhanced Switch

Enhanced Switch는 직역하면 향상된 Switch문이다. 한마디로 upgrade된 switch문이라고 생각하면 된다.

 

예를 들어, 요일의 길이를 출력하는 switch문을 작성한다고 가정해보자.

 

public class Main {
	public static void main(String[] args) {
    	String day = "Friday";
        
        //switch문
        switch(day) {
       	    case "Monday" : 
            case "Friday" :
            case "Sunday" : System.out.println(6); break;
            case "Tuesday" : System.out.println(7); break;
            case "Thursday" :
            case "Saturday" : System.out.println(8); break;
            case "Wednesday" : System.out.println(9); break;
        }
    }
}

 

이 예시를 enhanced switch문을 활용한다면 다음과 같이 바꿀 수 있다.

 

public class Main {
	public static void main(String[] args) {
    	String day = "Friday";
        
        //switch문
        switch(day) {
       	    case "Monday", "Friday", "Sunday" -> System.out.println(6); //break없어도 됨!!!
            case "Tuesday" -> System.out.println(7);
            case "Thursday", "Saturday" -> System.out.println(8);
            case "Wednesday" -> System.out.println(9);
        }
    }
}

 

훨씬 더 간편하고 편리하게 변한 것을 볼 수 있다. 여러 문장을 수행하고 싶다면 중괄호({})를 통해서 실행문을 묶어주면 된다.

 

 

Switch Expression

Enhance swith문을 사용하면 정말 편리한 기능 중 하나인 switch expression이 가능해진다. 이름 그대로 switch문을 통해 값을 표현하여 대입하는 것이 가능해지는 것이다.

 

위의 예제에서 길이를 출력하는 것이 아닌 int형 변수인 dayLength에 대입한다고 가정해보자. 일반적인 switch문의 경우에는 다음과 같이 코드를 작성할 수 있다.

 

public class Main {
	public static void main(String[] args) {
    	String day = "Friday";
        
        int dayLength;
        
        //switch문
        switch(day) {
       	    case "Monday" : 
            case "Friday" :
            case "Sunday" : dayLength = 6; break;
            case "Tuesday" : dayLength = 7; break;
            case "Thursday" :
            case "Saturday" : dayLength = 8; break;
            case "Wednesday" : dayLength = 9; break;
        }
    }
}

 

이 코드를 enhanced switch문을 통해 변경하면 다음과 같다.

public class Main {
	public static void main(String[] args) {
    	String day = "Friday";

        int dayLength = switch(day) {
       	    case "Monday", "Friday", "Sunday" -> 6; //break없어도 됨!!!
            case "Tuesday" -> 7;
            case "Thursday", "Saturday" -> 8;
            default "Wednesday" -> 9;
        }
    }
}

 

코드가 간결해진 것을 볼 수 있다. 하지만 enhanced switch문을 통해 expression을 사용할 때 주의할 점은 switch문에 조건식으로 활용되는 변수의 type이 위와 같이 String일 경우, default문이 없다면 오류가 발생하므로 이 점 주의하여야 한다!!

728x90

'Programming > Java' 카테고리의 다른 글

[Java/자바] 반복문 - while, do while  (0) 2023.09.23
[Java] 반복문 - for  (0) 2023.09.23
[Java] 조건문 - if  (0) 2023.09.23
[Java] 연산자 - SCE, 비트  (0) 2023.09.20
[Java]연산자 - 부호, 증감, 비교, 논리  (0) 2023.09.20