조건문은 조건식에 따라 다른 실행문을 실행하기 위해 사용한다.
조건문의 종류로는 if문, switch문이 있다.
if 문은 조건식의 결과가 true, false이냐에 따라, switch문은 변수의 값에 따라 실행문이 결정된다.
if문
if문은 조건식의 결과에 따라 블록 실행 여부가 결정된다. 조건식에는 true 또는 false 값을 산출할 수 있는 연산식이나, boolean 타입 변수가 올 수 있다.
조건식이 true 라면 블록을 실행하고, false 라면 블록을 실행하지 않는다.
중괄호 {} 블록은 여러 개의 실행문을 하나로 묶기 위해 작성되는데 만약 실행문이 한 문장밖에 없다면 생략할 수 있다.
예제) 점수가 90점 이상인지 판별하는 코드 작성하기
public static void main(String[] args) {
int score = 95;
if(score >= 90){
System.out.println("점수가 90보다 큽니다.");
System.out.println("등급은 A 입니다.");
}
if(score < 90){
System.out.println("점수가 90 보다 작습니다.");
System.out.println("등급은 B 입니다.");
}
}
score 변수의 값이 95 이므로 처음에 나온 if문의 조건식은 95 >= 90 이 되어 true 가 된다. 따라서 중괄호 안에 있는 블록의 실행문이 실행된다.
하지만 아래의 조건식에는 95 < 90 이 되어 false가 되므로 두번째 if 문의 중괄호 안에 있는 블록은 실행되지 않는다.
if-eles문
if문은 else 블록과 함께 사용되어 조건식의 결과에 따라 실행 블록을 선택한다.
if문의 조건식이 true 라면 if문의 블록이 실행되고 조건식이 false 라면 else문의 블록이 실행된다.
이전 예제를 if-else 문으로 수정하기
public static void main(String[] args) {
int score = 95;
if(score >= 90){
System.out.println("점수가 90보다 큽니다.");
System.out.println("등급은 A 입니다.");
}else{
System.out.println("점수가 90 보다 작습니다.");
System.out.println("등급은 B 입니다.");
}
}
if-else if-else문
조건문이 여러개인 if문도 있다.
처음 if문의 조건식이 false 일 경우 다른 조건식의 결과에 따라 실행블록을 선택할 수 있는데, if 블록의 끝에 else if문을 붙이면 된다.
else if문의 수는 제한이 없으며 여러 개의 조건식 중 true 가 되는 블록만 실행하고 전체 if 문을 벗어나게 된다.
else if 블록의 마지막에는 else 블록을 추가할 수 있는데, 모든 조건식이 false일 경우 else 블록을 실행하고 if 문을 벗어나게 된다.
예제) 점수가 90 점 이상은 A, 80점 이상은 B, 70점 이상은 C, 나머지는 D 를 주는 코드 작성하기
public static void main(String[] args) {
int score = 84;
if(score >= 90){
System.out.println("A");
}else if(score >= 80){
System.out.println("B");
}else if(score >= 70){
System.out.println("C");
}else{
System.out.println("D");
}
}
switch문
switch문은 if문과 마찬가지로 조건 제어문 이다. 하지만 switch문은 if문처럼 조건식이 true 일 경우에 블록내부의 실행문을 실행하는 것이 아니라, 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다.
if문은 조건식의 결과가 true, false 두 가지밖에 없기 때문에 경우의 수가 많아질수록 else-if를 반복적으로 추가해야 하므로 코드가 복잡해진다. 그러나 switch문은 변수의 값에 따라서 실행문이 결정되기 때문에 같은 기능의 if문보다 코드가 간결하다.
switch문은 골화 안의 변수 값과 동일한 값을 가지는 case로 가서 실행문을 실행한다. 만약 괄호안의 변수값과 동일한 값을 가진 case 가 없으면 default로 가서 실행문을 실행한다. default는 생략이 가능하다.
예제) 랜덤 클래스를 이용해서 1 ~ 6 까지의 랜덤한 숫자를 뽑은 이후 switch 문으로 판별하기
public static void main(String[] args) {
Random random = new Random();
int num = random.nextInt(6) + 1;
switch (num){
case 1:
System.out.println("1이 나옴");
break;
case 2:
System.out.println("2가 나옴");
break;
case 3:
System.out.println("3이 나옴");
break;
case 4:
System.out.println("4가 나옴");
break;
case 5:
System.out.println("5가 나옴");
break;
case 6:
System.out.println("6이 나옴");
break;
default:
System.out.println("다 안나옴");
}
}
case 끝에 break가 붙은 이유는 다음 case를 실행하지 않고 switch 문을 빠져나가기 위해서 이다.
break가 없다면 다음 case가 연달아 실행되는데, 이때는 case 값과는 상관없이 실행된다.