Java else if 조건문
문제 유형이 복합적으로 출력할 때 else if 문을 사용하는 케이스가 있다.
문제
입력된 연령 나이에 따라 메시지를 출력하는 프로그램을 작성한다.
나이는 int age 변수로 리터럴로 입력한다.
연령 나이별로 출력하는 메시지는 다음과 같다.
- 4세 이하는 "미취학"
- 5세 ~ 7세 이하는 "유치원생"
- 8세 ~ 13세 이하인 경우 "초등학생"
- 14세 ~16세 이하인 경우 "중학생"
- 17세 ~ 19세 이하인 경우 "고등학생"
- 20세 이상은 성인
if문을 사용하여 코드를 작성해보도록 한다.
테스트케이스
int age 리터럴 값을 테스트 기법 중, 경계값 분석 값으로 코드 동작 여부를 살펴보는걸 권장한다.
- 2-point 경계값: -1, 3, 5, 6, 8, 12, 14, 15, 17, 18, 20
- 3-point 경계값: -1, 3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20
age | result |
---|---|
-1 | 미취학 |
3 | 미취학 |
5 | 유치원생 |
6 | 유치원생 |
8 | 초등학생 |
12 | 초등학생 |
14 | 중학생 |
15 | 중학생 |
17 | 고등학생 |
18 | 고등학생 |
20 | 성인 |
This Table: 2-Point Boundary Value
-1 인 경우 "미취학"으로 표기되는데, 선택사항으로 예외코드 추가해주는 것도 좋다.
Java 문제 해결 코드 (if문)
먼저 if문으로 구성하면 다음과 같은 코드를 작성하게 된다.
public class Elseif {
public static void main(String[] args) {
int age = 17; // 사용자 나이
if (age <= 4) {
System.out.println("미취학");
}
if (age >= 5 && age <= 7) {
System.out.println("유치원생");
}
if (age >= 8 && age <= 13) {
System.out.println("초등학생");
}
if (age >= 14 && age <= 16) {
System.out.println("중학생");
}
if (age >= 17 && age <= 19) {
System.out.println("고등학생");
}
if (age >= 20) {
System.out.println("성인");
}
}
}
Code Output:고등학생
리팩토링
- 첫째, 불필요한 조건 검사
- 나이가 7살일 때 if 조건문 "미취학"을 충족되어 출력하고 코드를 반환하는게 이상적이지만, 위 코드는 이미 "미취학"을 출력하고 다음 if조건문 "유치원생" 검사하여 불필요한 동작을 하고 있다.
- 둘째, 중복된 조건문
- 나이를 7살로 주어졌을 때, "미취학" if조건을 넘기고 다음 "유치원생" if조건을 살펴본다.
"유치원생" if조건 로직 "age >= 5" 는 이미 "미취학" if조건 로직 "age <= 4"을 검증했기 때문에 "age >= 5" 부분은 중복된 조건으로 필요가 없다.
- 나이를 7살로 주어졌을 때, "미취학" if조건을 넘기고 다음 "유치원생" if조건을 살펴본다.
리팩토링 요구사항
- 첫째, if 조건 충족시 불필요한 다음 if 조건을 검사하지 않아야한다.
- 둘째, if 조건문에서 중복 조건 로직을 제거하라.
else if 문 사용하기
이제 if문 코드의 불필요한 요소들을 제거하고, else if문을 사용하여 코드를 개선해보도록 한다.
public class Elseif {
public static void main(String[] args) {
int age = 19; // 사용자 나이
if (age <= 4) {
System.out.println("미취학");
}
else if (age <= 7) {
System.out.println("유치원생");
}
else if (age <= 13) {
System.out.println("초등학생");
}
else if (age <= 16) {
System.out.println("중학생");
}
else if (age <= 19) {
System.out.println("고등학생");
}
else {
System.out.println("성인");
}
}
}
if문 하나만 실행하여도 else if문으로 조건유무를 체크하면서 실행한다.
만약 age가 8살인 경우 "미취학" 출력 후 다음 조건을 체크하지 않고 반환되었다.
그리고 if 조건문에서 불필요했던 조건을 없앰으로써 코드가 개선되었다.
실무에서는?
else if을 사용한 경우 유지보수와 가독성을 헤친다는 의견이 있다.
그래서 실무에서는 else if 를 거의 사용하지 않도록 하고 있다.
참고사항
if문을 사용시 꼭 코드 블록{} 을 꼭 입력할 필요가 없다.
- 블록{}사용:
if (true) { System.out.println("참"); }
- 블록{}미사용:
if (true) System.out.println("참");
다만, 다른 사람이 코드를 읽거나 작성이 필요할 때는 블록{} 추가해주는게 좋다.
코드 블록의 장점
- 유지보수성: 중괄호 사용으로 오류를 덜 발생시킨다.
- 가독성: 중괄호 사용으로 코드를 읽기 쉽고 코드 범위를 파악할 수 있다.