[Java] if문 2 - else if

코드 속의 "진돌"·2023년 12월 27일
0
post-thumbnail

✏️ 문제

  • 7세 이하일 경우 : “미취학”
  • 8세 이상 13세 이하일 경우 : “초등학생”
  • 14세 이상 16세 이하일 경우 : “중학생”
  • 17세 이상 19세 이하일 경우 : “고등학생”
  • 20세 이상일 경우 : “성인”

✏️ If3

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("성인");
    }
  }
}

이 코드는 다음과 같은 단점이 있다.

  • 불필요한 조건 검사 : 이미 조건을 만족해도 불필요한 다음 조건을 계속 검사한다. 예를 들어서 나이가 5살이라면 “미취학”이 이미 출력이 된다. 그런데 나머지 if문을 통한 조건 검사도 모두 실행해야 한다.
  • 코드 효율성 : 예를 들어서 나이가 8살인 “초등학생”이라면 “미취학”을 체크하는 조건인 age <= 7을 통해 나이가 이미 8살이 넘는 다는 사실을 알 수 있다. 그런데 바로 다음에 있는 “초등학생”을 체크하는 조건에서 age >= 8 && age <= 13라는 2가지 조건을 모두 수행한다. 여기서 age >= 8이라는 조건은 이미 앞의 age <= 7이라는 조건과 관련이 있다. 결과적으로 조건을 중복 체크한 것이다.

이런 코드에 else if를 사용하면 불필요한 조건 검사를 피하고 코드의 효율성을 향상시킬 수 있다.

✅ else if


else if문은 앞선 if문의 조건이 거짓일 때 다음 조건을 검사한다. 만약 앞선 if문이 참이라면 else if를 실행하지 않는다.

✏️ if-else 코드

if (condition1) {
	// 조건 1이 참일 때 실행되는 코드
} else if (condition2) {
	// 조건 1이 거짓이고 조건 2가 참일 때 실행되는 코드
} else if (condition3) {
	// 조건 2가 거짓이고 조건 3이 참일 때 실행되는 코드
} else {
	// 모든 조건이 거짓일 때 실행되는 코드
}

쉽게 이야기해서 이렇게 전체 if문을 하나로 묶는다고 보면 된다. 이렇게 하면 특정 조건이 만족하면 해당 코드를 실행하고 if문 전체를 빠져나온다. 특정 조건을 만족하지 않으면 다음 조건을 검사한다. 여기서 핵심은 순서대로 맞는 조건을 찾아보고, 맞는 조건이 있으면 딱 1개만 실행이 되는 것이다.

참고로 else는 생략할 수 있다.

✏️ else 생략 코드

if (condition1) {
	// 조건 1이 참일 때 실행되는 코드
} else if (condition2) {
	// 조건 1이 거짓이고, 조건 2가 참일 때 실행되는 코드
}

✏️ If4

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("성인");
    }
  }
}

✓ age = 7인 경우

if(age <= 7)의 조건이 참이다. “미취학”을 출력하고 전체 if문 밖으로 나간다.

✓ age = 13인 경우

if(age <= 7)의 조건이 거짓이다. 다음 조건으로 넘어간다.
else if(age <= 13)의 조건이 참이다. “초등학생”을 출력하고 전체 if문 밖으로 나간다.

✓ age = 50인 경우

if(age <= 7)의 조건이 거짓이다. 다음 조건으로 넘어간다.
else if(age <= 13)의 조건이 거짓이다. 다음 조건으로 넘어간다.
else if(age <= 16)의 조건이 거짓이다. 다음 조건으로 넘어간다.
else if(age <= 19)의 조건이 거짓이다. 다음 조건으로 넘어간다.

만족하는 조건 없이 else까지 왔다 else에 있는 “성인”을 출력하고 전체 if문 밖으로 나간다.

profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글