본문 바로가기

공부함/JAVA

[JAVA] 조건문 ( if / if-else / 삼항연산자 / switch-case / switch Expression)

조건문?

특정한 조건이 true인 경우 해당하는 수행문을 실행하게 구현된 것.

 

[ If ]

조건식이 참일 때 수행문을 실행한다.

조건식이 거짓인 경우 else 이후에 있는 수행문 2를 수행한다.

If ( 조건식 ) { 
	수행문1 ; 
} else { 
	수행문2 
}

 

 

[ if - else if - else ]

else의 뒤에 if를 추가하여 조건식을 한번 더 수행할 수 있다.

ㄴ 하나의 상황에 대한 조건식이 여러개로 나뉘어 각 조건마다 서로 다른 수행문을 수행해야 하는 경우에 사용된다. 

If ( 조건식 ) { 
	수행문1 ; 
} else if { 
	수행문 2 
} else { 
	수행문3 
}
 
int age =18 ;
if ( age < 8 ) {
system.out.println(“미취학아동”);
} else if ( age < 20 ){
system.out.println(“학생”);
} else {
system.out.println(“성인”);
}

 

결과 : 

학생

 

 

만약 if 뒤에 else를 붙이지 않으면 조건문은 종료된다.

즉 아래의 코드에서 수행문 2는 항상 실행된다

int a = 3; 
if ( a != 1 ) {
	system.out.println(“ a는 1이 아닙니다.” );
}
system.out.println(“ 이것은 수행문 2 입니다.” );
 
결과:
a는 1이 아닙니다.
이것은 수행문 2 입니다.
 

 

if는 단독조건이기 때문에 구문이 끝나면 해당 조건이 완료된다. 아래와 같이 코딩할 경우 모든 구문이 출력된다. 

int age =5 ;
if ( age < 8 ) {
system.out.println(“미취학아동”);
}
if ( age < 20 ){
system.out.println(“학생”);
}

 

결과 : 

미취학아동
학생
 
 

[ if - 삼항연산자

If - else 는 삼항연산자로 바꾸어 한 줄로 간략하게 사용할 수 있다.

( a > b ) ? true이면 반환값 : false면 반환값 ;

if ( a > b ) { max = a } else { max = b }
              ↓
result = ( a > b ) ? a : b ;
 

 

[ switch - case ]

하나의 조건으로 여러개의 값을 비교해야하는 경우 유용하게 사용할 수 있다.

- if 조건문을 사용할 때 코드가 복잡하고 번거로워지는 단점을 보완하여 가독성을 높여준다.

- 비교 조건이 특정 값이거나 문자열로 표현할 때 사용한다.

- break문을 사용하여 조건이 완료되면 switch 문을 빠져나온다.

- break가 없으면 그 다음 케이스를 구분하여 출력한다.

- switch - case 내에서는 {}를 사용하지 않는다.

 

- 조건이 case에 지정된 값과 같으면 실행한다.

int a = {user_input_value};

switch( a ) { 
case 1 :
   result = result 1 ; 
   break ;
case 2 :
   result = result 2 ;
   break ;
case 3 : case 4 :   
   result = result 3 ;
   break ;
default :
   result = result 4; 
}
 

- case를 중첩할 수있다.
switch(month){
	case 1 : case3 : case5 : case7 : case8 : case 10 : 
		day = 31 ;
 		break;
	case 2 : day = 28 ;
 		break;
	case 4 : case 6 : case 9 : case 11 :   
		day = 30 ;
 		break;
	default : 
		system.out.println(“존재하지 않는 달”);
		day = -1; 
}
system.out.println(month+“월은 ” + day + “일 입니다.“);

 

- case에는 문자형, 숫자형, 연산식도 사용할 수 있다.

아래의 경우, caseB+2를 수행한다.

int a = 2;  int b = 0;
switch( a ) {  //조건
case b+1 :
   result = result 1 ; // 조건이 case 1과 같으면 실행한다
   break ;
case b+2 :
   result = result 2 ;
   break ;
   
 //  또는
   
switch(medal){
	case ”gold“ :
		system.out.println(“금메달”);
		break;
    case ”silver“ :
        system.out.println(“은메달”);
        break;
    case ”bronze“ :
        system.out.println(“동메달”);
        break;
    default :
        system.out.println(“메달이 없습니다.”);
        medal = -1;
}
 

 

break ?

break는 조건에 부합하는 case에서 break가 있는 구문까지 실행한다.

모든 case에 break가 없다면 switch문이 끝날 때 까지 모두 실행한다.

아래의 경우, case 2, case 3, case4, default까지 모두 실행한다.

int a = 2;

switch( a ) { 
case 1 :
   result = result 1 ;
case 2 :
   result = result 2 ;
case 3 : case 4 :   
   result = result 3 ;
default :
   result = result 4; 
}
 

 


switch  Expression ? 

ㄴ java 14버전 이상부터 지원한다.
반환값을 바로 받을 수 있다.
case : case가 여러개인 경우 쉼표로 구분한다.
break 문을 사용하지 않는다.
->{} 람다식 사용

 yield 사용한다. ( switch문에 수행값과 반환이 있는 경우 반환값을 표현)
ㄴ 반환값만 있는 경우 yield를 사용하지않아도 됨.
ㄴ 수행값과 반환값이 같이 있는 경우 {}를 쓰고, 반환값에는 yield를 붙여주어야한다
ㄴ switch 문의 종료부분에 ;를 붙여주어야 함

int 반환값 = switch(조건){ case 조건1, 조건2 -> { yield 반환값 ; } default -> { yield 반환값; } };
int day = switch(month){
	case 1, 3, 5, 7, 8, 10, 12 -> 
		31 ;	 
	case 2 -> {
		system.out.println(“2월은”);
		yield  28 ;	
	}
	case 4, 6, 9, 11 ->
		30 ;  // 반환값만 있는 경우 yield를 사용하지않아도 됨.	
	default -> { 
		// 수행값과 반환값이 같이 있는 경우 반환값에 yield를 붙여준다.
		system.out.println(“존재하지 않는 달”);
		yield  0; 
	}
};