Java (자바)

[Java] 조건문 - switch case 문 / if, switch 차이점

Oscar:) 2022. 9. 27. 17:17

 

조건문에 대해서는 지난 if / else 문 포스팅에서 알아보았었다.

 

 

[JAVA] 조건문 - if / else if / else 문 + 예외처리

조건문 주어진 조건이 참이냐 거짓이냐에 따라 다른 명령을 처리하도록 만든 수행문이다. 프로그램의 가장 기본이 되는 코드이며, 조건문만 사용해도 웬만한 프로그램의 로직을 구현해낼 수 있

oscarstory.tistory.com

 

 

하지만 if 문이 아닌 또 다른 조건문이 존재한다.

 

이번 포스팅에서는 switch case 문에 대해 알아보겠다.

 

 


 

switch case 문 - 기초

 

주어진 조건을 기준으로 참, 거짓을 판별하여 해당 명령을 수행하는

'조건문' 의 특징으로만 보면, if 문과 크게 다를 것이 없다.

 

 

차이점이 있다면, switch case 문이 조금 더 간결해 보인다는 것이다.

 

따라서, 경우의 수가 많을 때 switch case 문을 사용하면 보다 편리하다.

 

 

기본 문법은 다음과 같다.

switch (조건) {
case 값 : 실행문;
break;
}

 

소괄호 안의 '조건' 과 case 뒤의 '값' 이 일치하면

실행문이 동작하는 원리이다.

(사실, '조건' 보다는 '비교대상' 이라는 말이 더 어울린다고 생각한다.)

 

break; 를 작성하면 해당 switch 문을 탈출한다.

 

 


 

switch case 문 - 기본 예제

 

이제 여러개의 case 를 작성해 보겠다.

public class Test {
	
	public static void main(String[] args) {
		
		int level = 2;
		
		switch (level) {
		
		case 1 : System.out.println("1 레벨입니다.");
		break;
		
		case 2 : System.out.println("2 레벨입니다.");
		break;
		
		case 3 : System.out.println("3 레벨입니다.");
		break;
		
		}
	}
}

 

출력 결과는 다음과 같다.

 

level = 2 로 초기화 해준 상태에서 조건을 변수 level 로 사용하였고,

case 2 에 해당하는 출력문이 실행된 것을 확인할 수 있다.

 

 


 

switch case 문 - 예외 경우

 

if 의 역할을 case 가 하고 있다고 볼 수 있는데,

else 의 역할은 누가 담당할까?

 

public class Test {
	
	public static void main(String[] args) {
		
		int level = 5;
		
		switch (level) {
		
		case 1 : System.out.println("1 레벨입니다.");
		break;
		
		case 2 : System.out.println("2 레벨입니다.");
		break;
		
		case 3 : System.out.println("3 레벨입니다.");
		break;
		
		default : System.out.println("해당 사항이 없습니다.");
		break;
		
		}
	}
}

 

조건에 해당하는 case 가 없다면, default 부분이 실행된다.

 

else 의 역할을 담당한다고 보면 되겠다.

 

 

따라서, 출력 결과는 다음과 같다.

 


 

break 를 작성하지 않는다면?

 

위에서 break 를 작성하면 해당 switch 문을 탈출하는 원리라고 설명했다.

 

break 를 작성하지 않는다면, 어떻게 되는지 살펴보자.

public class Test {
	
	public static void main(String[] args) {
		
		int level = 2;
		
		switch (level) {
		
		case 1 : System.out.println("1 레벨입니다.");
		break;
		
		case 2 : System.out.println("2 레벨입니다.");
//		break;
		
		case 3 : System.out.println("3 레벨입니다.");
//		break;
		
		default : System.out.println("해당 사항이 없습니다.");
		break;
		
		}
	}
}

 

변수 level 을 2로 초기화 해주었다.

원래대로라면, case 2에 해당하는 내용이 실행되어야 한다.

 

하지만 case 2, 3 뒤에 있던 break; 를 주석 처리했다.

 

 

출력 결과는 다음과 같다.

 

case 2 뿐만 아니라, 그 뒤에 있던 모든 내용이 출력되었다.

 

 

break; 를 작성하지 않는다면,

조건에 해당하지 않는 다음 case 또한 동작되는 것을 확인할 수 있었다.

 

조건에 알맞는 case 만을 동작시키려면

'반드시'  break; 를 작성해야 한다..!

 

 


 

switch case 문 - 다중 case 사용

 

switch case 문과 if 문의 차이점이 또 있다면,

연산자의 활용 여부이다.

 

연산자가 무엇인지 모르겠다면, 다음 게시글을 참고하기 바란다.

 

[JAVA] 자바 연산자 - 연산자의 종류와 활용법

연산이란? (Operation) 수, 함수 등에서 일정한 법칙에 따라 결과를 내는 행위이다. 연산에 사용되는 표시나 기호를 연산자(operator)라고 한다. 연산되는 데이터는 피연산자(operand)라고 한다. 연산자

oscarstory.tistory.com

 

 

if 문의 경우, 소괄호 안의 조건에서 비교연산자, 논리연산자 등을 사용할 수 있다.

ex) if (level<5)

 

하지만 switch case 문에서는 해당 연산자의 사용이 불가하다.

 

비교연산자를 작성했더니, 에러를 내뿜는 모습을 확인할 수 있다.

에러의 내용은 '타입 불일치' 이다.

 

정수형 자료형과 논리형 자료형 (int 와 boolean) 을 엄연히 구분 짓는 모습이다.

 

 

 

그렇다면, 조건에 해당하는 값이 여러 개일 때는 어떻게 해야 할까?

public class Test {
	
	public static void main(String[] args) {
		
		int grade = 3;
		
		switch (grade) {
		
		case 1: case 2: case 3: System.out.println("상위 등급입니다.");
		break;
		
		case 4: case 5: case 6: System.out.println("하위 등급입니다.");
		break;
		
		}
	}
}

 

여러 case 를 같은 실행문으로 작동시키려면,

위 예제와 같이 case 를 여러 개 이어붙여서 작성해 주면 된다.

 

 

출력 결과는 다음과 같다.

 

 


 

switch case 문 - 산술 연산을 활용한 예제

 

if 문 처럼 연산자의 활용이 자유롭지 못한 switch 문에도

산술연산자는 사용이 가능하다.

 

 

아래 예제는 산술연산(/ : 나눗셈)을 활용한 switch 문이다.

public class Test {
	
	public static void main(String[] args) {
		
		int score = 85;
		
		switch (score/10) {
		
		case 8: case 9: case 10: System.out.println("축하합니다! 합격입니다.");
		break;

		default : System.out.println("불합격입니다.");
		break;
		
		}
	}
}

 

case 80: case 81: case 82: ... case 100: 을 모두 작성하기는 번거롭다.

 

그렇기에 조건에서 정수를 한 자릿수로 만들어 case 를 최소화 해주었다.

 

정수형 자료형 int 는 정수만을 취급하기에,
나눗셈을 적용했을 때, 값이 해당 변수에 대입되고
소수점은 버려지는 점을 이용할 수 있다.

85를 10으로 나누면 값이 8이고 나머지는 5이다.
따라서 case 8 에 해당하는 실행문이 작동한다.

 

 

출력 결과는 다음과 같다.

 

 

 


 

 

 

이번 포스팅에서는 switch case 문에 대해 알아보았다.

 

 

또 다른 조건문인 if 문과의 차이점을 요약하자면 다음과 같다.

 

· 경우의 수가 많을 때, 가독성에서 유리하다.

· 연산자의 활용이 제한되어 불편할 수 있다.

 

= 경우의 수가 많고, 조건의 범위가 좁을 때 사용할 것을 추천한다.

 


 

본인은 조건문으로는 if 문을 주로 사용하는 편인데,

공부를 하며 이런저런 예제를 찾아볼 때마다 가끔씩

switch case 문을 사용한 예제를 발견하기도 한다.

 

본인이 자주 사용하지는 않더라도,

다른 사람이 작성한 코드를 읽을 줄 알아야 하기 때문에

switch case 문도 알아두어야 한다고 생각한다.