
package cond;
public class If3 {
public static void main(String[] args) {
int age = 14;
if (age <= 7) {
System.out.println("미취학");
}
if (age >= 8 && age <= 13) { // 8 ~ 13 : 초등학생
System.out.println("초등학생");
}
if (age >= 14 && age <= 16) { // 14 ~ 16 : 중학생
System.out.println("중학생");
}
if (age >= 17 && age <= 19) { // 17 ~ 19 : 고등학생
System.out.println("고등학생");
}
if (age >= 20) { // 20 ~ : 성인
System.out.println("성인");
}
}
}
이 코드는 다음과 같은 단점이 있다.
if문을 통한 조건 검사도 모두 실행해야 한다.age <= 7을 통해 나이가 이미 8살이 넘는 다는 사실을 알 수 있다. 그런데 바로 다음에 있는 “초등학생”을 체크하는 조건에서 age >= 8 && age <= 13라는 2가지 조건을 모두 수행한다. 여기서 age >= 8이라는 조건은 이미 앞의 age <= 7이라는 조건과 관련이 있다. 결과적으로 조건을 중복 체크한 것이다.이런 코드에 else if를 사용하면 불필요한 조건 검사를 피하고 코드의 효율성을 향상시킬 수 있다.
else if문은 앞선 if문의 조건이 거짓일 때 다음 조건을 검사한다. 만약 앞선 if문이 참이라면 else if를 실행하지 않는다.
if (condition1) {
// 조건 1이 참일 때 실행되는 코드
} else if (condition2) {
// 조건 1이 거짓이고 조건 2가 참일 때 실행되는 코드
} else if (condition3) {
// 조건 2가 거짓이고 조건 3이 참일 때 실행되는 코드
} else {
// 모든 조건이 거짓일 때 실행되는 코드
}
쉽게 이야기해서 이렇게 전체 if문을 하나로 묶는다고 보면 된다. 이렇게 하면 특정 조건이 만족하면 해당 코드를 실행하고 if문 전체를 빠져나온다. 특정 조건을 만족하지 않으면 다음 조건을 검사한다. 여기서 핵심은 순서대로 맞는 조건을 찾아보고, 맞는 조건이 있으면 딱 1개만 실행이 되는 것이다.
참고로 else는 생략할 수 있다.
if (condition1) {
// 조건 1이 참일 때 실행되는 코드
} else if (condition2) {
// 조건 1이 거짓이고, 조건 2가 참일 때 실행되는 코드
}
package cond;
public class If4 {
public static void main(String[] args) {
int age = 14;
if (age <= 7) { // ~ 7 : 미취학
System.out.println("미취학");
} else if (age <= 13) { // 8 ~ 13 : 초등학생
System.out.println("초등학생");
} else if (age <= 16) { // 14 ~ 16 : 중학생
System.out.println("중학생");
} else if (age <= 19) { // 17 ~ 19 : 고등학생
System.out.println("고등학생");
} else { // 20 ~ : 성인
System.out.println("성인");
}
}
}
if(age <= 7)의 조건이 참이다. “미취학”을 출력하고 전체 if문 밖으로 나간다.
if(age <= 7)의 조건이 거짓이다. 다음 조건으로 넘어간다.
else if(age <= 13)의 조건이 참이다. “초등학생”을 출력하고 전체 if문 밖으로 나간다.
if(age <= 7)의 조건이 거짓이다. 다음 조건으로 넘어간다.
else if(age <= 13)의 조건이 거짓이다. 다음 조건으로 넘어간다.
else if(age <= 16)의 조건이 거짓이다. 다음 조건으로 넘어간다.
else if(age <= 19)의 조건이 거짓이다. 다음 조건으로 넘어간다.
만족하는 조건 없이 else까지 왔다 else에 있는 “성인”을 출력하고 전체 if문 밖으로 나간다.