본문 바로가기
[JAVA]

[처음부터 다시 하는 JAVA] 조건문 if, if-else

by 북방바다코끼리표범 2024. 1. 8.

처음부터 다시 하는 자바 공부는 인프런의 김영한 강사님의 강의를 참고해서 공부했다.

 

if문

if 문은 특정 조건이 참인지 확인하고, 그 조건이 참( true )일 경우 특정 코드 블록을 실행한다.

if (condition) {
// 조건이 참일 때 실행되는 코드
}

코드 블록: {} (중괄호) 사이에 있는 코드

package cond; 

public class If1 {
	public static void main(String[] args) { 
        int age = 20;  // 사용자 나이
        
        if (age >= 18) {
        	System.out.println("성인입니다.");
        }
		if (age < 18) {
        } 
    }
}

실행 결과 
성인입니다.

if (age >= 18) 분석

//age = 20
if (age >= 18) {"성인입니다"}
if (20 >= 18) {"성인입니다"} //age의 값은 20이다. 
if (true) {"성인입니다"} //조건이 참으로 판명된다. 
{"성인입니다"} //if문에 있는 코드 블록이 실행된다.
조건이 참이므로 "성인입니다." 가 화면에 출력된다.

이후에 다음 코드가 실행된다.

if (age < 18) 분석
if (age < 18) {"미성년자입니다"}
if (20 < 18) {"미성년자입니다"} //age의 값은 20이다.
if (false) {"미성년자입니다"} //조건이 거짓으로 판명된다.
//해당 코드 블록은 실행되지 않는다.

조건이 거짓이므로 if 문 블록을 실행하지 않고, 빠져나온다. 따라서 "미성년자입니다" 는 화면에 출력되지 않는다. int age = 20 의 값을 15 로 변경하면 미성년자입니다. 가 출력되는 것을 확인할 수 있다.

 

else문

else 문은 if 문에서 만족하는 조건이 없을 때 실행하는 코드를 제공한다.

if (condition) {
	// 조건이 참일 때 실행되는 코드 
} else {
	// 만족하는 조건이 없을 때 실행되는 코드
}

else 문을 사용하면 앞서 진행했던 프로그램을 다음과 같이 더 간략하게 바꿀 수도 있다.

  • 기존: 만약 18살 이상이면 "성인입니다"를 출력하고, 만약 18살 미만이라면 "미성년자입니다."를 출력해야 한다. 
  • 변경: 만약 18살 이상이면 "성인입니다"를 출력하고, 그렇지 않으면 "미성년자입니다."를 출력해야 한다.

쉽게 이야기해서 18살이 넘으면 성인이고, 그렇지 않으면 모두 미성년자이다.

package cond; 

public class If2 {
	public static void main(String[] args) { 
		int age = 20;  // 사용자의 나이

		if (age >= 18) {
			System.out.println("성인입니다."); //참일 때 실행
        } else {
			System.out.println("미성년자입니다.");//만족하는 조건이 없을 때 실행
		} 
    }
}

실행 결과
성인입니다.

// int age = 20 의 값을 15 로 변경하면 미성년자입니다. 가 출력되는 것을 확인할 수 있다.

 

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문과 else if문

if 문에 else if 를 함께 사용하는 것은 서로 연관된 조건일 때 사용한다. 

그런데 서로 관련이 없는 독립 조건이면 else if 를 사용하지 않고 if 문을 각각 따로 사용해야 한다.

예시

// 예시1. if-else 사용: 서로 연관된 조건이어서, 하나로 묶을 때 
if (condition1) {
	// 작업1 수행
} else if (condition2) { 
	// 작업2 수행
}

// 예시2. if 각각 사용: 독립 조건일 때 
if (condition1) {
	// 작업1 수행
}
if (condition2) { 
	// 작업2 수행
}

예시 1은 작업1, 작업2 둘 중 하나만 수행된다. 그런데 예시 2는 조건만 맞다면 둘다 수행될 수 있다.
if 문에 여러 조건이 있다고 항상 if-else 로 묶어서 사용할 수 있는 것은 아니다. 

조건이 서로 영향을 주지 않고 각각 수행해야 하는 경우에는 else if 문을 사용하면 안되고, 대신에 여러 if 문을 분리해서 사용해야 한다.
여러 독립적인 조건을 검사해야 하는 경우가 그런 상황의 대표적인 예시이다. 

즉, 각 조건이 다른 조건과 연관되지 않고, 각각의 조건에 대해 별도의 작업을 수행해야 할 때 이런 상황이 발생한다.

 

예제를 통해 자세히 이해해보자. 


문제
온라인 쇼핑몰의 할인 시스템을 개발해야 한다. 한 사용자가 어떤 상품을 구매할 때, 다양한 할인 조건에 따라 총 할인 
금액이 달라질 수 있다.
각각의 할인 조건은 다음과 같다.

  • 아이템 가격이 10000원 이상일 때, 1000원 할인 
  • 나이가 10살 이하일 때 1000원 할인

이 할인 시스템의 핵심은 한 사용자가 동시에 여러 할인을 받을 수 있다는 점이다.
예를 들어, 10000원짜리 아이템을 구매할 때 1000원 할인을 받고, 동시에 나이가 10살 이하이면 추가로 1000원 더 
할인을 받는다. 그래서 총 2000원 까지 할인을 받을 수 있다.

package cond; 

public class If5 {
	public static void main(String[] args) {
        int price = 10000;// 아이템 가격
        int age = 10;//나이
        int discount = 0;

		if (price >= 10000) {
            discount = discount + 1000;
			System.out.println("10000원 이상 구매, 1000원 할인");
        }
		
        if (age <= 10) {
            discount = discount + 1000;
			System.out.println("어린이 1000원 할인");
        }

			System.out.println("총 할인 금액: " + discount + "원");
    } 
}

실행결과

//price = 10000, age = 10 
10000원 이상 구매, 1000원 할인
어린이 1000원 할인 
총 할인 금액: 2000원
  • 이 코드에서는 각각 독립된 if 문이 있다. 따라서 해당하는 모든 할인을 적용한다.
  • 만약 else if 를 쓰면, 첫 번째로 충족하는 조건만 할인이 적용되고 나머지는 무시된다. 따라서 사용자는 나머 
    지 할인을 놓칠 수 있다.

if 문을 사용해야 하는 곳에 else if 를 사용해서 어떤 문제가 발생하는지 확인해보자.

package cond; 

public class If6 {
	public static void main(String[] args) {
		int price = 10000;// 아이템 가격
		int age = 10;//나이
		int discount = 0;

		if (price >= 10000) {
            discount = discount + 1000;
			System.out.println("10000원 이상 구매, 1000원 할인");
        } else if (age <= 10) {
            discount = discount + 1000;
			System.out.println("어린이 1000원 할인");
        } else {
			System.out.println("할인 없음");
        }

		System.out.println("총 할인 금액: " + discount + "원");
    } 
}

실행 결과
//price = 10000, age = 10
10000원 이상 구매, 1000원 할인 
총 할인 금액: 1000원
  • 첫 번째로 충족되는 조건인 1000원 할인만 적용되고, if 문을 빠져나온다. 
    따라서 사용자는 나머지 할인을 놓치게 된다.

정리

if 문을 각각 사용할지, if 와 else if 를 함께 묶어서 사용할지는 요구사항에 따라 다르다. 둘의 차이를 이해하고 적절하게 사용하면 된다.

 

참고 - if문 {} 중괄호 생략

다음과 같이 if 문 다음에 실행할 명령이 하나만 있을 경우에는 {} 중괄호를 생략할 수 있다. 
else if , else 도 마 찬가지이다

if (true)
	System.out.println("if문에서 실행됨");

// 다음과 같은 경우에는 두번째 문장은 if 문과 무관하다. 
// 만약 둘다 if 문 안에 포함하려면 {} 를 사용해야 한다.

if (true)
	System.out.println("if문에서 실행됨"); 
	System.out.println("if문에서 실행 안됨");

// 만약 둘다 if 문 안에 포함하려면 다음과 같이 {} 를 사용해야 한다.
if (true) {
	System.out.println("if문에서 실행됨"); 
	System.out.println("if문에서 실행 안됨");
}

프로그래밍 스타일에 따라 다르겠지만, 일반적으로는 if 문의 명령이 한개만 있을 경우에도 다음과 같은 이유로 중괄호 
를 사용하는 것이 좋다.

  • 가독성: 중괄호를 사용하면 코드를 더 읽기 쉽게 만들어 준다. 조건문의 범위가 명확하게 표시되므로 코드의 흐름 
    을 더 쉽게 이해할 수 있다.
  • 유지보수성: 중괄호를 사용하면 나중에 코드를 수정할 때 오류를 덜 발생시킬 수 있다. 예를 들어, if 문에 또 다 
    른 코드를 추가하려고 할 때, 중괄호가 없으면 이 코드가 if 문의 일부라는 것이 명확하지 않을 수 있다.