본문 바로가기

Studying/JAVA

[JAVA]_Conditional Statement(조건문)

1. 조건문

- 조건의 참, 거짓에 따라서 서로 다른 작업을 수행.

- 주어진 조건을 비교 판단하여 조건에 만족할 경우 지정된 명령을 실행하고, 만족하지 않을 경우 다음 단계의 명령을 수행하도록 하는 구문.

 

package cond;

public class If1 {
    public static void main(String[] args) {

        int age = 20;   // 사용자 나이

        if (age >= 18) {
            System.out.println("성인입니다");
        }
        if (age <= 18) {
            System.out.println("미성년자입니다.");
        }
    }
}

[If1]

 

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

- 문법 :

     if (condition) {

          // 조건이 참일 때 실행되는 코드

     }

 

해당 코드에서 입력값이 20이므로 첫 번째 if문이 실행되어 "성인입니다"를 출력.

두 번째 if문은 조건이 거짓이므로 실행되지 않음. 따라서 화면에 출력되지 않음.


public class If2 {
    public static void main(String[] args) {

        int age = 20;

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

[If2]

 

- else문은 if문에서 만족하는 조건이 없을 때 실행하는 코드.

- 문법 :

     if (condition) {

          // 조건이 참일 때 실행되는 코드

     } else {

         // 만족하는 조건이 없을 때 실행되는 코드

     }


package cond;

public class If3 {
    public static void main(String[] args) {
    
        int age = 14;
        if(age <= 7) { //~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("성인");
        }
    }
}

[If3]

 

연령에 따라 다른 메시지를 출력하는 프로그램을 작성한다고 가정하자.

int age라는 변수를 사용하고, 연령에 따라 다음의 출력을 해야 함.

- 7세 이하일 경우 : "미취학"

- 8세 이상 13세 이하일 경우 : "초등학생"

- 14세 이상 16세 이하일 경우 : "중학생"

- 17세 이상 19세 이하일 경우 : "고등학생"

- 20세 이상일 경우 : "성인"

 

if문을 작성해서 코드를 사용하면 위에 코드처럼 작성할 수 있음.

하지만 이 코드는 단점이 있음.

1. 불필요한 조건 검사 : 이미 조건을 만족해도 불필요한 다음 조건을 계속 검사하게 됨.

2. 코드 효율성이 떨어짐. 조건을 중복 체크하기 때문.

 

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


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

[If4]

 

- else if문은 if문을 하나씩 사용하는 것보다 중복조건 피할 수 있고, 간단하게 작성 가능.

- 문법 :

     if (condition1) {

          // 조건1이 참일 때 실행되는 코드

     } else if (condition2) {

          // 조건1이 거짓이고, 조건2가 참일 때 실행되는 코드

     } else if (condition3) {

          // 조건2가 거짓이고, 조건3이 참일 때 실행되는 코드

     } else {

          // 모든 조건이 거짓일 때 실행되는 코드

     }

 

- 참고로 else는 생략 가능.


package cond;

public class If5 {
    public static void main(String[] args) {

        int itemPrice;
        itemPrice = 10000;
        
        int age;
        age = 10;
        
        int discount = 0;
        
        if(itemPrice >= 10000) {
            discount = discount + 1000;
            System.out.println("10000원 이상 구매 시, 1000원 할인");
        }

        if(age <= 10) {
            discount = discount + 1000;
            System.out.println("어린이 1000원 할인");
        }

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

[If5]

 

if문에 여러 조건이 있다고 항상 if-else로 묶어서 사용할 수 있는 것은 아님. 조건이 서로 영향을 주지 않고 각각 수행해야 하는 경우 else if문을 사용하면 안 되고, 대신 여러 if문을 분리해서 사용해야 함. 여러 독립적인 조건을 검사해야 하는 경우가 그런 상황의 대표적인 예시임. 즉 각 조건이 다른 조건과 연관 되지 않고, 각각의 조건에 대해 별도의 작업을 수행해야 할 때 이런 상황이 발생.

 

예제 통해 자세히 알아보자.

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

- 조건 : 아이템 가격이 10000원 이상일 때, 1000원 할인.

            나이가 10살 이하일 때 1000원 할인.

- 이 할인 시스템의 핵심은 한 사용자가 동시에 여러 할인 받을 수 있다는 점.

이 코드에서 각각 독립된 if문을 사용하면 해당하는 모든 할인을 적용할 수 있음.

package cond;

public class If6 {
    public static void main(String[] args) {

        int itemPrice;
        itemPrice = 10000;

        int age;
        age = 10;

        int discount = 0;

        if(itemPrice >= 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 + "원");
    }
}

[If6]

 

else if문을 사용하면 첫번째로 충족되는 조건인 1000원 할인만 적용되고, if문을 빠져나옴.

따라서 사용자는 나머지 할인을 놓치게 됨.

 

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


package cond;

public class Switch1 {
    public static void main(String[] args) {

        int grade = 1;
        int coupon;

        if(grade == 1) {
            coupon = 1000;
        } else if (grade == 2) {
            coupon = 2000;
        } else if (grade == 3) {
            coupon = 3000;
        } else {
            coupon = 500;
        }
        System.out.println("발급받은 쿠폰 : " + coupon);
    }
}

[Switch1]

 

- switch문을 사용하기 전 if문을 사용했을 때 나타내는 방법.


package cond;

public class Switch2 {
    public static void main(String[] args) {

        int grade = 2;
        int coupon;

        switch(grade) {
            case 1 :
                coupon = 1000;
                break;
            case 2 :
                coupon = 2000;
                break;
            case 3 :
                coupon = 3000;
                break;
            default:
                coupon = 500;
        }
        System.out.println("발급받은 쿠폰 : " + coupon);
    }
}

[Switch2]

 

- if문을 switch문으로 바꿔서 표현.

 

- switch문은 앞에서 배운 if문을 조금 더 편리하게 사용할 수 있는 기능.

- 문법 : 

     switch (조건식) {

          case value1 :

               // 조건식의 결과 값이 value1일 때 실행되는 코드

               break;

          case value2 : 

               // 조건식의 결과 값이 value2 일 때 실행되는 코드

               break;

          default :

               // 조건식의 결과 값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드

     }

 

- 조건식의 결과값이 어떤 case의 값과 일치하면 해당 case의 코드를 실행.

- break 문은 현재 실행 중인 코드를 끝내고 switch 문을 빠져나가게 하는 역할.

- break 문이 없으면 일치하는 case 이후의 모든 case 코드들이 순서대로 실행.

- default는 조건식의 결괏값이 모든 case의 값과 일치하지 않을 때 실행. (= if문의 else와 같음)


package cond;

public class Switch3 {
    public static void main(String[] args) {

        int grade = 2;
        int coupon;

        switch(grade) {
            case 1 :
                coupon = 1000;
                break;
            case 2 :
            case 3 :
                coupon = 3000;
                break;
            default:
                coupon = 500;
        }
        System.out.println("발급받은 쿠폰 : " + coupon);

        /*
        case 2에는 break가 없기 때문에 중단하지 않고 다음에 있는 case 3의 코드를 실행.
         */
    }
}

[Switch3]

 

- break문이 없으면 case2를 실행 후 case3을 실행하게 됨.

If문 vs switch문

 

- switch문의 조건식을 넣는 부분에는 x > 10과 같은 참, 거짓의 결과가 나오는 조건이 아닌, 단순히 값만 넣을 수 있음!

- switch문은 조건식이 특정 case와 같은지만 체크할 수 있음. 즉, 값이 같은지 확인하는 연산만 가능함. (문자도 가능)

- 반면 if문은 참, 거짓의 결과가 나오는 조건식을 자유롭게 적을 수 있음. ex) x > 10, x == 10 ...


package cond;

public class Switch4 {
    public static void main(String[] args) {

        // 자바14의 새로운 switch문

        int grade = 2;
        int coupon = switch (grade) {
            case 1 -> 1000;
            case 2 -> 2000;
            case 3 -> 3000;
            default -> 500;
        };
        System.out.println("발급받은 쿠폰 : " + coupon);
    }
}

[Switch4]

 

▶ 자바 14 새로운 switch문

 

- 기존 switch문과 다르게 ->를 사용하고, 선택된 데이터를 반환할 수 있음.


package cond;

public class CondOp1 {
    public static void main(String[] args) {

        int age = 18;
        String status;
        if (age >= 18) {
            status = "성인";
        } else {
            status = "미성년자";
        }
        System.out.println("age = " + age + " status = " + status);
    }
}

[CondOp1]

 

이 예제는 참과 거짓에 따라 status의 변수 값이 달라짐.

이렇게 단순히 참과 거짓에 따라서 특정 값을 구하는 경우 삼항 연산자 또는 조건 연산자라고 불리는 ? : 연산자 사용하는 것이 편함.


package cond;

public class CondOp2 {
    public static void main(String[] args) {

        int age = 18;
        String status = (age >= 18) ? "성인" : "미성년자";
        System.out.println("age = " + age + " status = " + status);
    }
}

[CondOp2]

 

*삼항연산자*

- 문법 : (조건) ? 참_표현식 : 거짓_표현식

 

- 삼항 연산자는 항이 3개라는 뜻.

- 조건, 참_표현식, 거짓_표현식 이렇게 항이 총 3개.


1-1. 조건식 예제

[ScoreEx]

 

- 점수는 변수 int score로 지정하고, 해당 변수를 기반으로 학점 출력하기.

- 출력 예시

     score : 95

     출력 : 학점은 A입니다.

 

     score : 85     출력 : 학점은 B입니다.

 

     score : 75     출력 : 학점은 C입니다.

 

     score : 65     출력 : 학점은 D입니다.

 

     score : 55     출력 : 학점은 F입니다.
package cond.ex;

public class ScoreEx {
    public static void main(String[] args) {

        int score = 85;

        if (score >= 90) {
            System.out.println("학점은 A입니다.");
        } else if (score >= 80 && score < 90) {
            System.out.println("학점은 B입니다.");
        } else if (score >= 70 && score < 80) {
            System.out.println("학점은 C입니다.");
        } else if (score >= 60 && score < 70) {
            System.out.println("학점은 D입니다.");
        } else {
            System.out.println("학점은 F입니다.");
        }

    }
}

[DistanceEx]

 

- 거리는 변수 int distance로 지정하고, 해당 변수를 기반으로 운송 수단 출력.

- 출력 예시 :

     distance : 1

     출력 : 도보를 이용하세요.

 

     distance : 5

     출력 : 자전거를 이용하세요.

 

     distance : 25

     출력 : 자동차를 이용하세요.

 

     distance : 150

     출력 : 비행기를 이용하세요.

package cond.ex;

public class DistanceEx {
    public static void main(String[] args) {

        int distance = 25;

        if (distance <= 1) {
            System.out.println("도보를 이용하세요.");
        } else if (distance <= 10) {
            System.out.println("자전거를 이용하세요.");
        } else if (distance <= 100) {
            System.out.println("자동차를 이용하세요.");
        } else {
            System.out.println("비행기를 이용하세요.");
        }
    }
}

[ExchangeRateEx]

 

- 특정 금액을 미국 달러에서 한국 원으로 변환하는 프로그램 작성.

- 환율은 1달러당 1300원이라고 가정.

- 다음과 같은 기준 따름

     - 달러가 0미만이면 : "잘못된 금액입니다."

     - 달러가 0일 때 ; "환전할 금액이 없습니다."

     - 달러가 0 초과일 때 : "환전 금액은 (계산된 원화 금액)원입니다."

- 금액은 변수 int dollor로 지정하고, 해당 변수를 기반으로 한국 원으로의 환전 금액 출력.

- 출력 예시 :

     dollar : -5

     출력 : 잘못된 금액입니다.

 

     dollar : 0

     출력 : 환전할 금액이 없습니다.

 

     dollar : 10

     출력 : 환전할 금액은 13000원입니다.

package cond.ex;

public class ExchangeRateEx {
    public static void main(String[] args) {

        int dollor = 20;
        int won = dollor * 1300;

        if (dollor < 0) {
            System.out.println("잘못된 금액입니다.");
        } else if (dollor == 0) {
            System.out.println("환전할 금액이 없습니다.");
        } else if (dollor > 0) {
            System.out.println("환전 금액은 " + won + "원입니다.");
        }
    }
}

[MovieRateEx]

 

- 요청한 평점 이상의 영화를 찾아서 추천하는 프로그램 작성

어바웃타임 : 평점9

토이 스토리 : 평점8

고질라 : 평점7

 

- 평점 변수는 double rating을 사용. if문 활용해서 문제 풀기.

- 출력 예시 :

     rating: 9
     출력:
     어바웃타임'을 추천합니다.


     rating: 8
     출력:
     '어바웃타임'을 추천합니다.
     '토이 스토리'를 추천합니다.


     rating: 7.1
     출력:
     '어바웃타임'을 추천합니다.
     '토이 스토리'를 추천합니다.


     rating: 7
     출력:
     '어바웃타임'을 추천합니다.
     '토이 스토리'를 추천합니다.
     '고질라'를 추천합니다.

package cond.ex;

public class MovieRateEx {
    public static void main(String[] args) {

        double rating = 7.1;

        if (rating <= 9) {
            System.out.println("'어바웃타임'을 추천합니다.");
        }
        if (rating <= 8) {
            System.out.println("'토이 스토리'를 추천합니다.");
        }
        if (rating <= 7) {
            System.out.println("'고질라'를 추천합니다.");
        }
    }
}

[GradeSwitchEx]

 

- String grade라는 문자열 만들고, 학점에 따른 성취도를 출력하는 프로그램 작성.

- 각 학점은 다름과 같은 성취도를 나타냄.

• "A" : "탁월한 성과입니다!"

• "B" : "좋은 성과입니다!"

• "C" : "준수한 성과입니다!"

• "D" : "향상이 필요합니다."

• "F" : "불합격입니다."

나머지 : "잘못된 학점입니다."

 

- 출력 예시 : 

     grade : "B"

     출력 : "좋은 성과입니다!"

 

     grade : "A"

     출력 : "탁월한 성과입니다!"

 

     grade : "F"

     출력 : "불합격입니다."

package cond.ex;

public class GradeSwitchEx {
    public static void main(String[] args) {

        String grade = "B";

        switch (grade) {
            case "A" :
                System.out.println("탁월한 성과입니다!");
                break;
            case "B" :
                System.out.println("좋은 성과입니다!");
                break;
            case "C" :
                System.out.println("준수한 성과입니다!");
                break;
            case "D" :
                System.out.println("향상이 필요합니다.");
                break;
            case "F" :
                System.out.println("불합격입니다.");
                break;
            default:
                System.out.println("잘못된 학점입니다.");
        }
    }
}

[CondOpEx]

 

두 개의 정수 변수 a와 b를 가지고 있음.

a는 10, b는 20일 때 삼항 연산자를 사용하여 두 숫자 중 더 큰 숫자를 출력하는 코드 작성.

 

- 출력 예시 : 더 큰 숫자는 20입니다.

package cond.ex;

public class CondOpEx {
    public static void main(String[] args) {

        int a, b;
        a = 10;
        b = 20;

        int result = (a > b) ? a : b;

        System.out.println("더 큰 숫자는 " + result + "입니다.");

    }
}

[EvenOddEx]

 

정수 x가 주어지면 x가 짝수일 때 "짝수"를, x가 홀수이면 "홀수"를 출력하는 프로그램 작성.

삼항 연산자를 사용해야 함.

 

참고로 x % 2를 사용하면 홀수, 짝수를 쉽게 계산할 수 있음.

 

- 출력 예시 :

     x : 2

     출력 : x = 2, 짝수

 

     x : 3

     출력 : x = 3, 홀수

package cond.ex;

public class EvenOddEx {
    public static void main(String[] args) {

        int x = 2;
        String result = (x % 2 == 0) ? "짝수" : "홀수";

        System.out.println("x = " + x + ", " + result);
    }
}

'Studying > JAVA' 카테고리의 다른 글

[JAVA]_Casting(형변환)  (0) 2024.12.03
[JAVA]_Scope(스코프)  (0) 2024.12.03
[JAVA]_Loop Statement(반복문)  (0) 2024.12.03
[JAVA]_Operator(연산자)  (1) 2024.11.26
[JAVA]_Variable(변수)  (0) 2024.11.23